Grundlagen: Funktionen für Zeichenketten
Der Datentyp string bietet einige Funktionen, um eine Zeichenkette zu verändern oder dessen Inhalt zu prüfen. Die Eigenschaft Length gibt die Länge der Zeichenkette zurück. Mit den Funktionen ToUpper() und ToLower() können wir alle in der Zeichenkette vorkommende Buchstaben in Groß- oder Kleinbuchstaben umwandeln. Die Trim-Funktion entfernt alle Leerzeichen am Anfang und am Ende der Zeichenkette. Grundsätzlich gilt für alle Zeichenketten, dass durch den Aufruf einer solchen Funktion die ursprüngliche Zeichenkette nicht verändert wird, sondern die geänderte Zeichenkette zurückgegeben wird. Möchte man also die Änderungen in der Quell-Zeichenkette speichern, müsste man z. B. sText = sText.ToUpper() notieren.
Eine Zeichenkette besteht, wie wir bereits gelernt haben, aus einzelnen Zeichen (char). Mit den Funktionen Split() und Substring() können wir eine Zeichenkette in verschiedene Teile zerlegen. Die Funktion Split() trennt die Zeichenkette an dem angegebenen Zeichen (Typ char) bzw. an der angegebenen Teilzeichenkette (Typ string). Als Rückgabe erhalten wir ein Array (dazu später mehr) bzw. vereinfacht gesagt eine Liste aus Teilzeichenketten. Im 1. Beispiel trennen wir unseren Text an allen Leerzeichen und zählen die Anzahl der Teilzeichenketten (Eigenschaft Length des Arrays). Vereinfacht gesagt, zählen wir die Anzahl der Wörter (mal abgesehen von den zusätzlich hinzukommenden führenden und endeten Leerzeichen). Die Split-Funktion erwartet als Parameter ein einzelnes Zeichen (char) oder ein Array (Liste) von char-Elementen (new char[] { 'a', 'b', 'c' }). Wenn wir nicht an einem einzelnen Zeichen trennen wollen, können wir die Split-Funktion auch mit einem Array von Zeichenketten (Typ string) aufrufen (siehe 2. Beispiel). Hier wollen wir den Quelltext an Leerzeichen und Bindestrichen trennen. Das Beispiel sieht am Anfang vielleicht etwas verwirrend aus, da wir hier ebenfalls ein char-Array hätten verwenden können, da es sich ja nur um einzelne Zeichen handelt. Hiervon wollen wir uns jedoch nicht verwirren lassen. Dort wird der Split-Funktion noch ein 2. Parameter übergeben, in welchem RemoveEmptyEntries der StringSplitOptions-Enumeration übergeben wird. Dadurch werden alle Teilzeichenketten, welche leer sind, nicht mit in das Ziel-Array übernommen. Dieser 2. Parameter ist immer notwendig, wenn wir der Split-Funktion ein string-Array übergeben. Um leere Elemente nicht zu ignorieren, muss der Wert None für die StringSplitOptions-Enumeration verwendet werden. Die Funktion Substring() extrahiert eine Teilzeichenkette aus einer Zeichenkette. Als Parameter müssen hier der Startindex (1. Zeichen = Index 0) und die Länge übergeben werden, wobei der Längen-Parameter optional ist.
Immer wieder kommt es vor, dass wir die Position eines bestimmten Zeichens oder einer Teilzeichenkette von einer Zeichenkette bestimmen wollen. Hierfür dient die Funktion IndexOf() und LastIndexOf(). Wobei IndexOf() das erste Vorkommen zurückgibt und LastIndexOf() das letzte Vorkommen. Wie der Name schon vermuten lässt, gibt die Funktion einen Index zurück, d. h. wenn das gesuchte Zeichen sich ganz am Anfang befindet, gibt die Funktion den Wert 0 zurück. Bleibt die Suche erfolglos, erhalten wir -1 als Rückgabewert. IndexOf() und LastIndexOf() kann sowohl ein einzelnes Zeichen (char) als auch eine ganze Zeichenkette (string) suchen.
C# bietet noch weitere Funktionen, um eine Zeichenkette zu prüfen. Die Funktion Contains() prüft, ob die angegebene Teilzeichenkette in der Zeichenkette vorhanden ist. Dabei spielt es keine Rolle, ob das gesuchte einmal oder mehrmals vorkommt. Die Funktion StartsWith() prüft, wie der Name schon sagt, ob die Zeichenkette mit dem gesuchten Text beginnt. Bei der Funktion EndsWith() wird geprüft, ob die Zeichenkette mit dem gesuchten Text endet. Alle 3 Funktionen arbeiten case-sensitive, d. h. dass die Groß- und Kleinschreibung beachtet werden muss. Wollen Sie eine Prüfung durchführen, bei der die Groß- und Kleinschreibung keine Rolle spielt, müssen Sie die Zeichenkette erst in Groß- oder Kleinbuchstaben umwandeln (z. B. "Hallo wELt".ToUpper().Contains("WELT").
Die Funktion Insert() fügt eine gewisse Teilzeichenkette an einer gewünschten Position ein. Dazu wird als 1. Parameter die Position (0-basierend) übergeben und als 2. Paramater der einzufügende Text. Remove() ist das Gegenstück zur Insert-Funktion. Hiermit kann eine gewisse Anzahl an Zeichen (2. Parameter) an der angegebenen Position (ebenfalls 0-basierend) entfernt werden.
Program.cs
const string sText = " > Hallo vom C#-Buch V2.0! "; Console.WriteLine(sText); Console.WriteLine(sText.Length); Console.WriteLine(); // Konvertierungs-Funktionen Console.WriteLine(sText.ToLower()); Console.WriteLine(sText.ToUpper()); Console.WriteLine(sText.Trim()); Console.WriteLine(); // Trennungs-Funktionen Console.WriteLine(sText.Split(' ').Length); // Alternative: Console.WriteLine(sText.Split(new char[] { ' ' }).Length); Console.WriteLine(sText.Split(new string[] { " ", "-" }, StringSplitOptions.RemoveEmptyEntries).Length); Console.WriteLine(sText.Substring(4, 5)); Console.WriteLine(); // Such-Funktionen Console.WriteLine(sText.IndexOf(' ')); Console.WriteLine(sText.LastIndexOf(' ')); Console.WriteLine(); // Prüf-Funktionen (gibt true oder false zurück) Console.WriteLine(sText.Contains("hallo")); // wird nicht gefunden (mit "Hallo" wäre es gefunden worden) Console.WriteLine(sText.StartsWith("C")); Console.WriteLine(sText.EndsWith("!")); Console.WriteLine(); // Veränderungs-Funktionen Console.WriteLine(sText.Insert(24, "1")); // aus V2.0 wird V2.10 Console.WriteLine(sText.Remove(9, 4)); // entfernt "vom" Console.ReadKey();