Geteilte Zeichenfolge basierend auf dem ersten Auftreten des Zeichens

74

Wie kann ich eine C # -String basierend auf dem ersten Auftreten des angegebenen Zeichens teilen? Angenommen, ich habe eine Zeichenfolge mit dem Wert:

101,a,b,c,d

Ich möchte es aufteilen als

101
a,b,c,d

Das ist durch das erste Auftreten von Kommazeichen.

Vishnu Y.
quelle

Antworten:

174

Sie können angeben, wie viele Teilzeichenfolgen zurückgegeben werden sollen, indem Sie string.Split:

var pieces = myString.Split(new[] { ',' }, 2);

Kehrt zurück:

101
a,b,c,d
Grant Winney
quelle
18
string s = "101,a,b,c,d";
int index = s.IndexOf(',');
string first =  s.Substring(0, index);
string second = s.Substring(index + 1);
Arin Ghazarian
quelle
4
@pcnThird Ich habe nicht abgelehnt, aber wahrscheinlich, weil es sich nur um Code handelt, der keine Erklärung für die verwendete Methode enthält.
Mark Hall
@pcnThird, weiß nicht, obwohl ich denke, dass GrantWinneys Antwort die beste ist.
Arin Ghazarian
Tatsächlich bietet diese eine gute Alternative zur Antwort von GrantWinney für diejenigen, die keinen Zugriff auf diese Aufteilungsmethode haben. (Diejenigen, die das kompakte Framework zum Beispiel verwenden)
Maniz
3
Vielleicht, weil IndexOf -1 zurückgibt, wenn es das Trennzeichen nicht finden kann. In diesem Fall teilt der Code die Zeichenfolge nicht korrekt. Es sollte die gesamte Zeichenfolge als erste zurückgeben, aber zuerst ist sie leer (oder stürzt möglicherweise ab).
ThisGuy
8

Sie können Substringbeide Teile separat erhalten.

Zuerst ermitteln Sie IndexOfdie Position des ersten Kommas und teilen es dann auf:

string input = "101,a,b,c,d";
int firstCommaIndex = input.IndexOf(',');

string firstPart = input.Substring(0, firstCommaIndex); //101
string secondPart = input.Substring(firstCommaIndex + 1); //a,b,c,d

Im zweiten Teil +1ist zu vermeiden, dass das Komma eingefügt wird.

Pierre-Luc Pineault
quelle
1
Benutze das nicht; firstCommaIndex kann -1 sein, wenn das Komma nie gefunden wurde.
Ruud van Gaal
4

Verwenden Sie string.Split()Funktion. Es dauert die max. Anzahl der Chunks, die erstellt werden. Angenommen, Sie haben eine Zeichenfolge "abc, def, ghi" und rufen Split () mit dem countParameter 2 auf. Dadurch werden zwei Blöcke "abc" und "def, ghi" erstellt. Stellen Sie sicher, dass Sie es string.Split(new[] {','}, 2)so nennen , damit das C # es nicht mit der anderen Überladung verwechselt.

Punkt net
quelle
aber siehe @sierras Antwort unten
Fattie
2

In .net Core können Sie Folgendes verwenden:

var pieces = myString.Split(',', 2);

Kehrt zurück:

101
a,b,c,d
mark_h
quelle
2
Split(',', 2)löst eine Warnung aus , die mit Visual Studio , um gegossene fragen 2zu char.
Cœur
1
var pieces = myString.Split(',', 2);

Das wird nicht funktionieren. Die Überladung stimmt nicht überein und der Compiler lehnt sie ab.

So muss es sein:

char[] chDelimiter = {','};
var pieces = myString.Split(chDelimiter, 2);
Sierra
quelle