1. Substring in einem String suchen
In der letzten Vorlesung hast du gelernt, wie man ein Substring aus einem String bekommt. Jetzt schauen wir uns an, wie man einen String im anderen findet. Dafür gibt es 5 coole Methoden:
Methode Contains: Enthält der String das Substring?
Gibt true zurück, wenn der übergebene String im aufrufenden String enthalten ist.
string phrase = "Wind der Veränderungen";
bool hasWord = phrase.Contains("Veränderungen"); // true
Die Suche ist case-sensitiv! "wind".Contains("W") — false.
Methode IndexOf: Position des Substrings finden
Funktioniert ähnlich wie IndexOf bei Arrays: Sucht das Substring im String (von Anfang bis Ende) und gibt den Index des ersten Vorkommens zurück.
string text = "wassermelonewassermelone";
int index = text.IndexOf("melone"); // 2
- Wenn nichts gefunden wird, gibt es -1 zurück.
- Es gibt eine Alternative mit Startposition: IndexOf("melone", 4). Genau wie bei Arrays.
Methode LastIndexOf: letztes Vorkommen
Funktioniert auch wie LastIndexOf bei Arrays: Sucht das Substring im String (von Ende zu Anfang) und gibt den Index des ersten Vorkommens von hinten zurück.
string repeated = "aufgabe aufgabe";
int last = repeated.LastIndexOf("aufgabe"); // 7
Beginnt/endet der String mit einem bestimmten Substring?
Oft muss man prüfen, ob unser String mit einem bestimmten Substring beginnt (oder endet). Dafür gibt es zwei Methoden:
- StartsWith — prüft, ob der String mit einem bestimmten Substring beginnt;
- EndsWith — prüft, ob der String mit einem bestimmten Substring endet.
string fileName = "foto.jpg";
bool isJpg = fileName.EndsWith(".jpg"); // true
string email = "support@company.com";
bool isSupport = email.StartsWith("support"); // true
Wenn du ohne Beachtung der Groß-/Kleinschreibung vergleichen willst, musst du einen zusätzlichen Parameter mit dem Vergleichsmodus übergeben (siehe Doku zu StringComparison.OrdinalIgnoreCase).
2. Methode Replace: Zeichen und Substrings ersetzen
Die Methode Replace ersetzt alle Vorkommen von String A durch String B. Ursprünglich als Tool gegen Tippfehler, Zensur und Variablenersetzung in Templates gedacht! (Kleiner Scherz.)
string address = "London, Baker-Straße";
string updated = address.Replace("London", "Paris");
Console.WriteLine(updated); // "Paris, Baker-Straße"
- Du kannst sogar einzelne Zeichen ersetzen: str.Replace('a', 'z')
- Wichtig: Alle Ersetzungen passieren im ganzen String, nicht nur beim ersten Vorkommen.
3. Methode Split: String in Stücke schneiden
Die Methode Split macht Folgendes: Sie nimmt deinen String und schneidet ihn in Teile, indem sie Trennzeichen verwendet – Zeichen oder Strings, an denen geteilt werden soll. Die Methode gibt ein Array von Strings zurück, in die der Ursprungsstring zerlegt wurde.
string[] parts = originalString.Split(separator);
- separator — Zeichen oder Array von Zeichen, die als Trennzeichen verwendet werden.
Das einfachste Beispiel
Wir teilen den String am Leerzeichen:
string input = "apfel birne orange banane";
string[] fruits = input.Split(' '); // enthält das Array ["apfel","birne","orange","banane"]
Console.WriteLine(fruits[0]); // "apfel"
Console.WriteLine(fruits[1]); // "birne"
Hier bekommen wir ein Array mit 4 Strings, wobei jedes Wort ein eigenes Element ist.
Mehrere Trennzeichen
Manchmal gibt es im String nicht nur ein Trennzeichen. Zum Beispiel könnte der User Werte mit Leerzeichen, Komma oder Semikolon eingeben.
In solchen Fällen kann man ein Array von Trennzeichen verwenden:
string input = "apfel, birne; orange banane";
char[] separators = { ' ', ',', ';' };
string[] fruits = input.Split(separators, StringSplitOptions.RemoveEmptyEntries);
Bonus: Der optionale Parameter StringSplitOptions.RemoveEmptyEntries entfernt leere Fragmente. Das ist praktisch, wenn der User mehrere Trennzeichen hintereinander eingegeben hat – zum Beispiel zwei Leerzeichen oder sowas wie "apfel,, birne".
Trennen nach Substring
Trennzeichen können auch Strings sein, nicht nur einzelne Zeichen. Zum Beispiel, wenn du eine CSV-Datei mit dem Trennzeichen ";" oder | hast:
// Trennzeichen als einzelnes Zeichen
string data = "Ivanov;Petrov;Sidorov";
string[] names = data.Split(';'); // nach Zeichen ';'
// Oder, wenn das Trennzeichen ein ganzer String ist:
string log = "2024-01-01::Fehler::Aufgabe konnte nicht ausgeführt werden";
string[] separators = { "::" };
string[] parts = log.Split(separators);
4. Methode Join: String-Array wieder zusammenbauen
Die Methode Join macht das Gegenteil: Sie nimmt ein Array von Strings und klebt sie zu einem String zusammen, wobei zwischen den Elementen das von dir gewählte Trennzeichen eingefügt wird.
string result = string.Join(separator, arrayOfStrings);
- separator — String, der zwischen die Elemente eingefügt wird.
- arrayOfStrings — Array oder Collection von Strings (string[], List<string> usw.).
Das einfachste Beispiel
Wir machen aus einem Array von Strings einen String mit Kommas:
string[] items = { "apfel", "birne", "orange", "banane" };
string joined = string.Join(", ", items);
Console.WriteLine(joined); // "apfel, birne, orange, banane"
Join mit leerem Trennzeichen – Strings einfach zusammenkleben
Manchmal willst du einfach nur die Strings aneinanderhängen, ohne etwas dazwischen:
string[] parts = { "Ich", "liebe", "C#" };
string message = string.Join("", parts);
Console.WriteLine(message); // "IchliebeC#"
5. Typische Fehler
Sehr oft vergessen Anfänger, nach dem Splitten eines Strings mit Split die überflüssigen Leerzeichen zu entfernen. Wenn der User zum Beispiel "apfel, birne ,banane" eingibt, bekommst du nach Split Elemente wie " birne ". Wenn du das direkt in Zahlen umwandelst oder vergleichst, gibt's Bugs. Benutze Trim() nach Split für jedes Element – das ist eine gute Angewohnheit.
Zweiter Punkt – überflüssige leere Strings. Wenn der User zwei Trennzeichen hintereinander eingibt oder den String mit einem Trennzeichen beginnt oder beendet, kann Split leere Elemente zurückgeben. Nutze StringSplitOptions.RemoveEmptyEntries, damit du später keine Fehler bekommst.
Wenn das Array für Join leere Elemente oder null enthält, ignoriert Join sie einfach. Aber falls du das nicht willst (zum Beispiel, weil du im Report zeigen willst, dass manche Werte fehlen), musst du das Array vorher selbst bearbeiten.
Und noch was: Split verändert nie den Ursprungsstring, sondern gibt ein neues Array zurück. Join verändert auch nicht das Ursprungsarray, sondern gibt einen neuen String zurück. Merke: Strings und Arrays in C# sind immutable (unveränderlich).
GO TO FULL VERSION