String.Split eignet sich zum Teilen eines Strings mit mehreren Teilen auf einem Trennzeichen.
Wie soll ich fortfahren, eine Zeichenfolge nur am ersten Trennzeichen aufzuteilen? ZB habe ich eine Schnur
"Time: 10:12:12\r\n"
Und ich möchte ein Array, das aussieht
{"Time","10:12:12\r\n"}
:
vonTime
und sowieso nicht, was gefragt wurdeAntworten:
Der beste Ansatz hängt ein wenig davon ab, wie flexibel das Parsen im Hinblick auf mögliche zusätzliche Leerzeichen und dergleichen sein soll. Überprüfen Sie die genauen Formatspezifikationen, um festzustellen, was Sie benötigen.
yourString.Split(new char[] { ':' }, 2)
Begrenzt Sie auf zwei 2 Teilzeichenfolgen. Dadurch wird jedoch das Leerzeichen am Anfang der zweiten Zeichenfolge nicht gekürzt. Sie können dies jedoch in einer zweiten Operation nach der Aufteilung tun.
yourString.Split(new char[] { ':', ' ' }, 2, StringSplitOptions.RemoveEmptyEntries)
Sollte funktionieren, wird aber unterbrochen, wenn Sie versuchen, einen Headernamen zu teilen, der ein Leerzeichen enthält.
yourString.Split(new string[] { ": " }, 2, StringSplitOptions.None);
Wird genau das tun, was Sie beschreiben, erfordert aber tatsächlich, dass der Raum vorhanden ist.
yourString.Split(new string[] { ": ", ":" }, 2, StringSplitOptions.None);
Macht den Speicherplatz optional, aber Sie müssen immer noch
TrimStart()
mehr als einen Speicherplatz verwenden.Um das Format etwas flexibel und Ihren Code lesbar zu halten, empfehle ich die erste Option:
string[] split = yourString.Split(new char[] { ':' }, 2); // Optionally check split.Length here split[1] = split[1].TrimStart();
quelle
.Select(s=> s.Trim())
So schneide ich oft die Ergebnisse von SplitIn Ihrem obigen Beispiel könnten Sie nach ":" (dh Doppelpunkt mit Leerzeichen) teilen, da dies anscheinend das ist, was Sie getan haben. Wenn Sie wirklich nur das erste Delimeter geteilt haben, sehen Sie ein führendes Leerzeichen in Ihrem zweiten Array-Element.
Allerdings sollten Sie sich wahrscheinlich diese Überladung von Split ansehen ...
http://msdn.microsoft.com/en-us/library/c1bs0eda.aspx
public string[] Split( char[] separator, int count )
... mit dem Sie eine maximale Anzahl von Teilzeichenfolgen angeben können.
quelle
?("Time: 10:12:12\r\n").Split(new char[] { ':', ' ' }, 2, StringSplitOptions.RemoveEmptyEntries) {Dimensions:[2]} [0]: "Time" [1]: "10:12:12\r\n"
andere Optionen:
?("Time: 10:12:12\r\n").Split(new char[] { ':' }, 2) {Dimensions:[2]} [0]: "Time" [1]: " 10:12:12\r\n" ?("Time: 10:12:12\r\n").Split(new char[] { ':' }, 1) {Dimensions:[1]} [0]: "Time: 10:12:12\r\n" ?("Time: 10:12:12\r\n").Split(new char[] { ':' }, 3) {Dimensions:[3]} [0]: "Time" [1]: " 10" [2]: "12:12\r\n"
quelle
Ich habe eine Variation von Thorarins Antwort oben übernommen. Das Folgende sollte in der Lage sein, Ihre Anforderungen zu erfüllen und die Leerzeichen zu kürzen.
yourString.Split(new []{'-'},2).Select(s => s.Trim())
quelle