EMZETT.
Login

Kurz: string ist ein Referenztyp, der sich aber wie ein Wert verhält: unveränderlich. Alle Methoden liefern einen neuen String.

Teil des Kurses C#

Kapitel 4 von 16 im Kurs C#. Mit Fortschritt, Quiz und Zertifikat auf der Lernseite.

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("   "));

Ausgabe:

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"));

Ausgabe:

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()));

Ausgabe:

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);

Ausgabe:

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());

Ausgabe:

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"]}");

Ausgabe:

mia@beispiel.de
tom@test.org
True
a#b#c#
2025-12-24

Merke

  • Strings sind unveränderlich; == vergleicht den Inhalt
  • StringComparison steuert Groß-/Kleinschreibung und Kultur
  • Split, Join, Substring, Replace, Trim, PadLeft, Contains sind Alltagswerkzeuge
  • StringBuilder für viele Änderungen; Rohtext """ für mehrzeiligen Text
  • Formate :F2, :N0, :P1, :D5 und Kultur beachten
  • Regex-Funktionen stehen in System.Text.RegularExpressions

Übungsaufgabe

Schreibe eine Methode, die prüft, ob ein Text ein Palindrom ist (Groß-/Kleinschreibung und Leerzeichen egal).

Quiz zur Selbstkontrolle

Weiter im Kurs

Zurück: Operatoren, Bedingungen und Schleifen

Weiter: Methoden

Alle Kapitel: C# im Überblick