Menu

C# String-Methoden: Split, Replace, Contains, IndexOf, Trim, Join und mehr

Die String-Methoden, die du in C# jeden Tag brauchst: Split mit mehreren Trennzeichen und Optionen, Replace, Contains und Suche ohne Groß- und Kleinschreibung, IndexOf und LastIndexOf, StartsWith und EndsWith, Trim, ToUpper und ToLower, PadLeft, Join, Concat und einen String umkehren.

Diese Seite enthält ausführbare Editoren - bearbeiten, ausführen und Ausgabe sofort sehen.

System.String hat Dutzende Methoden. Diese Seite behandelt die, die in echtem Code die meiste Arbeit erledigen, mit den Optionen und Fallen, die zählen. Eine Regel gilt für alle: Strings sind unveränderlich, jede Methode gibt also einen neuen String (oder einen Wert) zurück und lässt das Original unverändert. s.Trim(); allein in einer Zeile bewirkt nichts; schreibe s = s.Trim();.

Split

Split zerlegt einen String an jedem Trennzeichen in ein string[]:

Ausgabe:

3
apple
banana
cherry
red/green/ blue/yellow
INFO/started/ready

Beachte " blue": Split schneidet genau am Trennzeichen und behält alle Leerzeichen. Zwei Optionen erledigen das übliche Aufräumen:

Ausgabe:

5
4
c#|dotnet|linq
key=[Subject] value=[Re: Meeting: Friday]
3

RemoveEmptyEntries verwirft Teile der Länge null, aber keine Teile, die nur aus Leerzeichen bestehen (" " hat oben überlebt). .NET 5 hat StringSplitOptions.TrimEntries hinzugefügt, und beide lassen sich kombinieren: tags.Split(',', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries) liefert das saubere Ergebnis in einem Aufruf. Übergibst du null als Trennzeichen, wird an jedem Leerraum geteilt, der übliche Weg, Text in Wörter zu zerlegen.

Das Teilen an einem einzelnen char (Split(',')) braucht kein Array. Die Überladungen, die ein char plus Optionen oder einen einzelnen string nehmen, gibt es ab .NET Core 2.0; die oben verwendeten Array-Formen funktionieren überall, auch unter .NET Framework und in Unity.

Replace

Replace ersetzt jedes Vorkommen eines Zeichens oder Teilstrings:

Ausgabe:

5551234567
555.123.4567
Cats and dogs and CATS
dogs and dogs and dogs
dogs and cats and CATS
too many spaces

Die Überladung mit einem StringComparison-Argument gibt es ab .NET Core 2.0. Unter .NET Framework erledigt man das Ersetzen ohne Groß- und Kleinschreibung mit Regex.Replace(text, Regex.Escape(find), replacement, RegexOptions.IgnoreCase). Durch Ersetzen mit "" entfernst du Zeichen, und mehrere verkettete Replace-Aufrufe sind für eine Handvoll Ersetzungen in Ordnung.

Contains, IndexOf, StartsWith und EndsWith

Diese Methoden suchen. Contains antwortet mit Ja oder Nein; IndexOf und LastIndexOf geben eine Position zurück oder -1, wenn es keinen Treffer gibt; StartsWith und EndsWith prüfen die Enden.

Ausgabe:

True
False
True
True
8
30
28
-1
16
False
True
True

Alle beachten standardmäßig Groß- und Kleinschreibung. Contains(string, StringComparison) gibt es ab .NET Core 2.1; die Form IndexOf(...) >= 0 funktioniert in jeder Version, deshalb begegnet sie dir in älterem Code. IndexOfAny(new[] { ',', ';' }) findet das erste von mehreren Zeichen.

Ein Hinweis zur Kultur: Ohne StringComparison verwenden StartsWith, EndsWith, IndexOf(string) und CompareTo kulturabhängige Regeln, während Contains, Replace und IndexOf(char) ordinal vergleichen. Wer StringComparison.Ordinal oder OrdinalIgnoreCase explizit übergibt, beseitigt die Mehrdeutigkeit, und Code-Analyzer empfehlen genau das.

Trim, TrimStart und TrimEnd

Trim entfernt Leerraum (Leerzeichen, Tabs, Zeilenumbrüche) an beiden Enden. TrimStart und TrimEnd entfernen an einem Ende. Bekommen sie Zeichen übergeben, entfernen sie stattdessen diese:

Ausgabe:

[ana@example.com]
[ana@example.com \n]
[  x]
SALE
7
path/to/dir
1,234.50

Trim bearbeitet nur die Enden; Leerzeichen im Inneren des Strings bleiben erhalten. TrimStart('0') auf "000" gibt einen leeren String zurück, parse Zahlenstrings also mit int.Parse, statt Nullen von Hand zu entfernen.

ToUpper und ToLower

Ausgabe:

MAYA LOPEZ
maya lopez
MAYA LOPEZ
Coffee

ToUpper und ToLower folgen der aktuellen Kultur, im Türkischen ist "i".ToUpper() daher ein großes İ mit Punkt, nicht I. Für Bezeichner, Schlüssel und Dateinamen nimm ToUpperInvariant und ToLowerInvariant. Zum Vergleichen nimm eine StringComparison, statt die Schreibweise überhaupt umzuwandeln (siehe Strings). Um jedes Wort großzuschreiben, gibt es CultureInfo.CurrentCulture.TextInfo.ToTitleCase(text), das allerdings Wörter unverändert lässt, die schon komplett großgeschrieben sind.

PadLeft und PadRight

Auffüllen fügt Zeichen hinzu, bis der String eine Gesamtbreite erreicht. Das ist praktisch für Ausgaben mit fester Breite und um Codes mit Nullen aufzufüllen:

Ausgabe:

000042
[Tea     ]
[     Tea]
Too long already
Espresso..  2.40
Latte.....  3.60
Mocha.....  3.95

Die Ausrichtung bei der Interpolation ({name,-10}) erledigt dieselbe Aufgabe direkt im String.

Join und Concat

string.Join setzt ein Trennzeichen zwischen die Elemente einer beliebigen Collection. string.Concat verbindet ohne Trennzeichen:

Ausgabe:

Ana, Ben, Chloe
1 + 2 + 3
True
2026-09
AnaBenChloe
Ana, Ben and Chloe

Join ist der richtige Weg, eine Liste mit Trennzeichen zu bauen: Es gibt kein überzähliges Trennzeichen am Ende zu entfernen, und das Ergebnis entsteht in einem Durchgang. Es ruft für jedes Element ToString() auf und funktioniert daher auch mit Zahlen und Objekten.

Reverse, Insert und Remove

Es gibt keine Methode string.Reverse, die einen String zurückgibt. Die zwei üblichen Ansätze:

Ausgabe:

desserts
desserts
True
2026/Q3-09
Hello
HelloWorld

word.Reverse() allein gibt ein IEnumerable<char> zurück, keinen String; die Ausgabe zeigt einen Typnamen. Beide Methoden kehren UTF-16-Codeeinheiten um, was Zeichen aus zwei Einheiten (die meisten Emojis) und Buchstaben mit kombinierenden Akzenten zerstört.

Kurzübersicht

AufgabeMethode
In Teile zerlegens.Split(','), s.Split(new[] {',', ';'}, StringSplitOptions.RemoveEmptyEntries)
Alle ersetzens.Replace("a", "b")
Enthälts.Contains("x"), s.Contains("x", StringComparison.OrdinalIgnoreCase)
Positions.IndexOf("x"), s.LastIndexOf('x') (-1, wenn nicht vorhanden)
Beginnt oder endet mits.StartsWith("x"), s.EndsWith(".pdf", StringComparison.OrdinalIgnoreCase)
Leerraum an den Enden entfernens.Trim(), s.TrimStart(), s.TrimEnd()
Schreibweise änderns.ToUpper(), s.ToLowerInvariant()
Auf eine Breite auffüllens.PadLeft(6, '0'), s.PadRight(10)
Collection verbindenstring.Join(", ", items)
Teil eines Stringss.Substring(start, length)
Einfügen oder löschens.Insert(i, "x"), s.Remove(i, count)
Auf null oder leer prüfenstring.IsNullOrWhiteSpace(s)

Häufig gestellte Fragen

Wie teile ich einen String in C#?

text.Split(',') gibt ein string[] mit den Teilen zwischen den Kommas zurück. Übergib mehrere Trennzeichen als Array (Split(new[] { ',', ';' })), ein String-Trennzeichen mit Split(new[] { ", " }, StringSplitOptions.None) und StringSplitOptions.RemoveEmptyEntries, um leere Teile zu verwerfen, die durch doppelte Trennzeichen entstehen. .NET 5 hat StringSplitOptions.TrimEntries hinzugefügt, das jeden Teil trimmt.

Wie prüfe ich, ob ein String einen anderen enthält, ohne Groß- und Kleinschreibung?

Ab .NET Core 2.1: text.Contains("error", StringComparison.OrdinalIgnoreCase). Unter .NET Framework, dem diese Überladung fehlt, nimm text.IndexOf("error", StringComparison.OrdinalIgnoreCase) >= 0. Vermeide text.ToLower().Contains(...), das eine Kopie allokiert und sich in manchen Kulturen falsch verhalten kann.

Verändert String.Replace in C# den ursprünglichen String?

Nein. Strings sind unveränderlich, also gibt Replace einen neuen String zurück, in dem jedes Vorkommen ersetzt ist, und lässt das Original, wie es war. Schreibe s = s.Replace("old", "new");. Es ersetzt alle Vorkommen, nicht nur das erste; um nur das erste zu ersetzen, finde es mit IndexOf und baue den String neu auf oder rufe Replace auf einer Regex-Instanz mit der Anzahl 1 auf.

Was gibt IndexOf zurück, wenn der String nicht gefunden wird?

-1. Jedes Ergebnis ab 0 ist die nullbasierte Position des ersten Treffers. Prüfe immer auf -1, bevor du das Ergebnis als Index verwendest, denn Substring(-1) wirft, und Substring(-1 + 1) gibt stillschweigend den ganzen String zurück. LastIndexOf funktioniert genauso und sucht vom Ende her.

Wie kehre ich in C# einen String um?

Kopiere ihn in ein char-Array, kehre das Array um und baue einen neuen String: char[] a = s.ToCharArray(); Array.Reverse(a); string r = new string(a);. Mit LINQ tut new string(s.Reverse().ToArray()) dasselbe. Beide kehren UTF-16-Einheiten um, Emojis und kombinierende Akzente können also durcheinandergeraten.

Coddy programming languages illustration

Lerne mit Coddy zu programmieren

LOS GEHT'S