Swift: Wie ersetzt man Zeichen in einer Zeichenkette? Vollständige Anleitung für Anfänger
\n\nFrüher oder später steht jeder Swift-Entwickler vor der Aufgabe: Man muss bestimmte Zeichen in einer Zeichenkette durch andere ersetzen. Das klingt einfach, oder? Aber Anfänger sind oft verwirrt, weil Swift String kein Array von Zeichen wie in C ist, sondern eine komplexe Unicode-kompatible Struktur. In diesem Artikel behandeln wir die gängigsten und effektivsten Methoden zum Ersetzen von Zeichen in Swift – von einfach bis fortgeschritten.
\n\nWir werden Methoden nicht nur trocken auflisten. Stattdessen sehen wir uns reale Beispiele an, die Ihnen in der Praxis begegnen: vom Ersetzen von Leerzeichen bis zum Entfernen von Satzzeichen und der Arbeit mit Emojis. Los geht's!
\n\nWarum ist Swift String kein einfaches Array von Zeichen?
\nBevor wir Zeichen ersetzen, ist es wichtig zu verstehen, wie eine Zeichenkette in Swift aufgebaut ist. String ist eine Sammlung von Character, aber jeder Character kann aus mehreren Unicode-Skalaren bestehen (z. B. Emoji 🚀 oder der Buchstabe „é“ mit Diakritika). Daher funktioniert die Indizierung mit Int hier nicht direkt. Stattdessen verwendet Swift String.Index.
Zum Ersetzen von Zeichen müssen Sie sich jedoch nicht in die Tiefen der Indizes begeben – es gibt fertige High-Level-Methoden. Schauen wir uns die beliebtesten an.
\n\nMethode Nr. 1: replacingOccurrences – der König des Ersetzens
\nDer einfachste und offensichtlichste Weg ist die Verwendung der Methode replacingOccurrences(of:with:). Sie gibt eine neue Zeichenkette mit ersetzten Vorkommen zurück. Die ursprüngliche Zeichenkette bleibt unverändert (Swift ist eine Sprache mit standardmäßig unveränderlichen Zeichenketten).
let original = "Hallo, Welt!"\nlet replaced = original.replacingOccurrences(of: "Welt", with: "Swift")\nprint(replaced) // "Hallo, Swift!"\nprint(original) // "Hallo, Welt!" – das Original bleibt unverändert\n\nDiese Methode ist ideal für einfache Fälle: Ersetzen eines Wortes, Zeichens oder einer Teilzeichenkette. Aber was ist, wenn mehrere verschiedene Zeichen ersetzt werden müssen? Zum Beispiel alle Leerzeichen und Punkte entfernen?
\n\nVerkettung von Aufrufen für mehrere Ersetzungen
\nSie können replacingOccurrences mehrmals hintereinander aufrufen:
let text = "Hallo, Welt! Wie geht es dir?"\nlet cleaned = text\n .replacingOccurrences(of: ",", with: "")\n .replacingOccurrences(of: "!", with: "")\n .replacingOccurrences(of: " ", with: "_")\nprint(cleaned) // "Hallo_Welt_Wie_geht_es_dir?"\n\nNachteil: Bei vielen Ersetzungen wird der Code unübersichtlich. Für solche Fälle eignen sich andere Methoden oder reguläre Ausdrücke besser.
\n\nMethode Nr. 2: Ersetzen mit map und filter (funktionaler Ansatz)
\nSwift ist nicht nur OOP, sondern auch funktionale Programmierung. Sie können mit map jedes Zeichen einer Zeichenkette durchgehen und es nach Bedingung ersetzen. Das ist besonders praktisch, wenn Sie alle Vorkommen einer bestimmten Zeichengruppe ersetzen möchten.
let input = "a1b2c3d4"\nlet result = input.map { char -> Character in\n if char.isNumber {\n return "X"\n } else {\n return char\n }\n}\nprint(String(result)) // "aXbXcXdX"\n\nHier haben wir alle Ziffern durch "X" ersetzt. Und wenn Sie Zeichen entfernen möchten? Verwenden Sie filter:
let withPunctuation = "Hallo!!! Wie geht es dir??"\nlet noPunctuation = withPunctuation.filter { !$0.isPunctuation }\nprint(noPunctuation) // "Hallo Wie geht es dir"\n\nDieser Ansatz ist sehr flexibel: Sie können beliebige Prüfungen verwenden – isNumber, isLetter, isWhitespace oder sogar den Vergleich mit einer Zeichengruppe.
Methode Nr. 3: Reguläre Ausdrücke (NSRegularExpression)
\nWenn die Aufgabe komplexer wird (Ersetzen nach Muster, Entfernen aller E-Mails, Ersetzen von Daten), kommt man um reguläre Ausdrücke nicht herum. Swift unterstützt NSRegularExpression aus Foundation.
\n\nimport Foundation\n\nlet text = "Meine E-Mail ist test@example.com und Ihre ist user@test.org"\nlet regex = try! NSRegularExpression