string ist ein Referenztyp, der sich aber wie ein Wert verhält: unveränderlich. Alle Methoden liefern einen neuen String.
string s = "C# macht Spaß";
Console.WriteLine($"{s.Length} {s[0]} {s.IndexOf("macht")} {s.IndexOf('x')}");
Console.WriteLine($"{s.ToUpper()} | {s.ToLower()}");
Console.WriteLine($"{s.Substring(3)} | {s[..2]} | {s.Substring(3, 5)}");
Console.WriteLine($"{s.Replace("a", "4")} | {s.Contains("Spaß")} | {s.StartsWith("C#")} | {s.EndsWith("ß")}");
Console.WriteLine("[" + " Leerraum ".Trim() + "][" + " x ".TrimStart() + "]");
Console.WriteLine(string.Join(", ", new[] { "a", "b", "c" }) + " " + new string('-', 5) + " " + "ab".PadLeft(5, '.') + " " + "7".PadLeft(3, '0'));
Console.WriteLine(string.IsNullOrEmpty("") + " " + string.IsNullOrWhiteSpace(" "));13 C 3 -1 C# MACHT SPAß | c# macht spaß macht Spaß | C# | macht C# m4cht Sp4ß | True | True | True [Leerraum][x ] a, b, c ----- ...ab 007 True True
Vergleichen
string a = "Hallo", b = "hallo";
Console.WriteLine($"{a == b} {a.Equals(b)} {a.Equals(b, StringComparison.OrdinalIgnoreCase)}");
Console.WriteLine($"{string.Compare("apfel", "birne")} {"b".CompareTo("a")}");
Console.WriteLine(string.Equals(a, "Hallo"));False False True -1 1 True
Anders als in Java vergleicht == bei Strings den Inhalt. Für Groß-/Kleinschreibung gib StringComparison an. Für Texte, die Menschen eingeben, nimm OrdinalIgnoreCase, für sprachabhängige Sortierung InvariantCulture/CurrentCulture.
Zerlegen und Zusammensetzen
string csv = "Mia;17;Köln";
string[] teile = csv.Split(';');
Console.WriteLine($"{teile.Length} {teile[2]}");
Console.WriteLine(string.Join("|", "a b c".Split(' ', StringSplitOptions.RemoveEmptyEntries)));
var sb = new System.Text.StringBuilder(); // effizient in Schleifen
for (int i = 1; i <= 5; i++) sb.Append(i).Append(i < 5 ? ", " : "");
sb.Insert(0, "[").Append(']');
Console.WriteLine(sb.ToString() + " " + sb.Length);
foreach (char c in "Java") Console.Write(c + "-");
Console.WriteLine();
Console.WriteLine(new string("abc".Reverse().ToArray()));3 Köln a|b|c [1, 2, 3, 4, 5] 15 J-a-v-a- cba
Interpolation, Formate, Rohtext
string name = "Mia"; int punkte = 42; double quote = 87.456; decimal preis = 1234.5m;
Console.WriteLine($"{name} hat {punkte} Punkte ({quote:F1} %)");
Console.WriteLine($"|{name,6}|{name,-6}|{punkte:D5}|{punkte:X}|{quote:E2}|{preis:N2}|");
Console.WriteLine($"{1234567:N0} {0.256:P1} {DateTime.MinValue.Year}");
string mehrzeilig = """
Das ist ein Rohtext-Literal.
Mit "Anführungszeichen" und \ ohne Maskierung.
""";
Console.WriteLine(mehrzeilig);
string pfad = @"C:\Ordner\datei.txt"; // wörtlicher String
Console.WriteLine(pfad);Mia hat 42 Punkte (87.5 %) | Mia|Mia |00042|2A|8.75E+001|1,234.50| 1,234,567 25.6 % 1 Das ist ein Rohtext-Literal. Mit "Anführungszeichen" und \ ohne Maskierung. C:\Ordner\datei.txt
Die Ausgabe von :N2 und :C hängt von der Kultur ab (Dezimalkomma in Deutschland, Punkt in den USA). In der Entwicklung nimm CultureInfo.InvariantCulture, wenn die Ausgabe immer gleich aussehen soll.
Zeichen und Unicode
Console.WriteLine($"{char.IsDigit('7')} {char.IsLetter('ä')} {char.ToUpper('ß')} {(int) 'A'} {(char) 97}");
string emoji = "A\U0001F600";
Console.WriteLine($"{emoji.Length} {emoji.EnumerateRunes().Count()}");
Console.WriteLine("straße".ToUpperInvariant());True True ß 65 a 3 2 STRAßE
Reguläre Ausdrücke
using System.Text.RegularExpressions;
string text = "Mails: mia@beispiel.de, tom@test.org";
foreach (Match m in Regex.Matches(text, @"[\w.]+@[\w.]+\.\w+")) Console.WriteLine(m.Value);
Console.WriteLine(Regex.IsMatch("50667", @"^\d{5}$"));
Console.WriteLine(Regex.Replace("a1b22c333", @"\d+", "#"));
var treffer = Regex.Match("24.12.2025", @"(?<tag>\d+)\.(?<monat>\d+)\.(?<jahr>\d+)");
Console.WriteLine($"{treffer.Groups["jahr"]}-{treffer.Groups["monat"]}-{treffer.Groups["tag"]}");mia@beispiel.de tom@test.org True a#b#c# 2025-12-24
Merke
- Strings sind unveränderlich;
==vergleicht den Inhalt StringComparisonsteuert Groß-/Kleinschreibung und KulturSplit,Join,Substring,Replace,Trim,PadLeft,Containssind AlltagswerkzeugeStringBuilderfür viele Änderungen; Rohtext"""für mehrzeiligen Text- Formate
:F2,:N0,:P1,:D5und Kultur beachten - Regex-Funktionen stehen in
System.Text.RegularExpressions
Aufgabe
Schreibe eine Methode, die prüft, ob ein Text ein Palindrom ist (Groß-/Kleinschreibung und Leerzeichen egal).