Wie prüft man, ob ein String einen Substring in Swift enthält? Vollständige Anleitung
\n\nHallo, liebe Entwicklerin, lieber Entwickler! Wenn du jemals in Swift programmiert hast und dich gefragt hast: „Wie finde ich ein Wort innerhalb eines anderen?“, dann bist du hier genau richtig. Dieses Thema gehört zu den häufigsten Fragen auf Stack Overflow (die englische Version hat Hunderttausende von Aufrufen). Und das aus gutem Grund: Die Arbeit mit Strings ist eine Grundlage, ohne die keine App auskommt.
\n\nIn diesem Artikel gehen wir alle gängigen Methoden durch, um zu prüfen, ob ein String einen Substring enthält. Vom einfachen contains() bis hin zu fortgeschrittenen Techniken mit case-insensitiver Suche und regulären Ausdrücken. Los geht's!
1. Der einfachste Weg: Die Methode contains()
\n\nSeit Swift 1.0 gibt es die eingebaute Methode contains() für den Typ String. Sie funktioniert intuitiv und ist sehr schnell.
let fullString = "Hallo, Swift-Welt!"\nlet searchString = "Swift"\n\nif fullString.contains(searchString) {\n print("Ja, der String enthält '\\(searchString)'")\n} else {\n print("Nein, enthält nicht")\n}\n// Ausgabe: Ja, der String enthält 'Swift'\n\nWichtig: Die Methode contains() ist case-sensitiv. Das bedeutet, dass "swift" nicht in dem String "Swift" gefunden wird. Aber das beheben wir gleich.
2. Case-insensitive Suche: localizedCaseInsensitiveContains()
\n\nOft möchte man ein Wort finden, ohne auf Groß- und Kleinschreibung zu achten. Dafür gibt es eine spezielle Methode, die die Locale des Benutzers berücksichtigt.
\n\nlet text = "Willkommen bei Swift"\nlet search = "swift"\n\nif text.localizedCaseInsensitiveContains(search) {\n print("Gefunden! Groß-/Kleinschreibung spielt keine Rolle.")\n} else {\n print("Nicht gefunden")\n}\n// Ausgabe: Gefunden! Groß-/Kleinschreibung spielt keine Rolle.\n\nDiese Methode verwendet die aktuelle Locale des Geräts, was besonders für Sprachen mit besonderen Vergleichsregeln wichtig ist (z. B. Türkisch, wo „i“ und „I“ unterschiedliche Buchstaben sind).
\n\n3. Suche mit Locale-Berücksichtigung: localizedStandardContains()
\n\nEine weitere nützliche Methode ist localizedStandardContains(). Sie führt die Suche so durch, wie die Standardsuche in iOS (z. B. in Spotlight oder Finder).
let fileName = "Urlaubsfotos_2024.jpg"\nlet query = "urlaub"\n\nif fileName.localizedStandardContains(query) {\n print("Datei gefunden!")\n}\n// Ausgabe: Datei gefunden!\n\nDiese Methode normalisiert Strings automatisch, entfernt diakritische Zeichen (z. B. „é“ = „e“) und arbeitet case-insensitiv. Ideal für Suchfelder in der Benutzeroberfläche.
\n\n4. Die klassische Methode: range(of:)
\n\nManchmal möchte man nicht nur wissen, ob ein Substring vorhanden ist, sondern auch seine Position. Hier hilft range(of:). Es gibt einen optionalen Bereich (Range<String.Index>?) zurück.
let phrase = "Lerne Swift auf pythonlib.de"\nlet word = "Swift"\n\nif let range = phrase.range(of: word) {\n print("Substring gefunden an Position: \\(range.lowerBound)")\n // Man kann sogar einen Teil des Strings extrahieren\n let extracted = phrase[range]\n print("Extrahiert: \\(extracted)")\n} else {\n print("Substring nicht gefunden")\n}\n\nFür die case-insensitive Suche mit range verwendest du die Option .caseInsensitive:
if let range = phrase.range(of: "swift", options: .caseInsensitive) {\n print("Ohne Berücksichtigung der Groß-/Kleinschreibung gefunden: \\(phrase[range])")\n}\n\n5. Prüfung auf Anfang und Ende eines Strings
\n\nManchmal muss man nicht prüfen, „ob etwas enthalten ist“, sondern „ob etwas mit ... beginnt“ oder „mit ... endet“. Dafür gibt es spezielle Methoden:
\n\nlet url = "https://pythonlib.de"\n\nif url.hasPrefix("https://") {\n print("Das ist eine sichere URL")\n}\n\nif url.hasSuffix(".de") {\n print("Deutsche Domain")\n}\n\nBeide Methoden sind ebenfalls case-sensitiv. Für case-insensitive Prüfungen musst du die Strings vorher mit .lowercased() oder .uppercased() vereinheitlichen.