Ich habe die Methode Split()
zum Teilen von Zeichenfolgen verwendet, aber dies scheint nur zu funktionieren, wenn Sie eine Zeichenfolge durch ein Zeichen teilen. Gibt es eine Möglichkeit, ein string
zu teilen, wobei eine andere Zeichenfolge der Parameter split by ist?
Ich habe versucht, den Splitter in ein Zeichen-Array umzuwandeln, ohne Erfolg.
Mit anderen Worten, ich möchte das string
aufteilen:
THExxQUICKxxBROWNxxFOX
von xx
, und geben Sie ein Array mit folgenden Werten zurück:
DER SCHNELLE BRAUNE FUCHS
Um durch eine Zeichenfolge zu trennen, müssen Sie String-Array-Überladung verwenden.
string data = "THExxQUICKxxBROWNxxFOX";
return data.Split(new string[] { "xx" }, StringSplitOptions.None);
Es gibt ein Überladung von Split , das Zeichenfolgen akzeptiert.
"THExxQUICKxxBROWNxxFOX".Split(new [] { "xx" }, StringSplitOptions.None);
Sie können eine dieser StringSplitOptions verwenden
Wenn die Zeichenfolge also "THExxQUICKxxxxBROWNxxFOX" lautet, gibt StringSplitOptions.None
einen leeren Eintrag im Array für den Teil "xxxx" zurück, während StringSplitOptions.RemoveEmptyEntries
dies nicht tut.
Regex.Split(string, "xx")
so mache ich es normalerweise. Natürlich brauchst du eine
using System.Text.RegularExpressions;
aber andererseits brauche ich die ganze Zeit diese Bibliothek.
Dafür gibt es eine Überladung von String.Split :
"THExxQUICKxxBROWNxxFOX".Split(new [] {"xx"}, StringSplitOptions.None);
Im Allgemeinen verwende ich dafür gerne meine eigene Erweiterung:
string data = "THExxQUICKxxBROWNxxFOX";
var dataspt = data.Split("xx");
//>THE QUICK BROWN FOX
//the extension class must be declared as static
public static class StringExtension
{
public static string[] Split(this string str, string splitter)
{
return str.Split(new[] { splitter }, StringSplitOptions.None);
}
}
Dies führt jedoch zu einer Ausnahme, wenn Microsoft beschließt, diese Methodenüberladung in späteren Versionen aufzunehmen. Es ist auch der wahrscheinliche Grund, warum Microsoft diese Methode in der Zwischenzeit nicht aufgenommen hat: Mindestens ein Unternehmen, für das ich gearbeitet habe, hat eine solche Erweiterung in all seinen C # -Projekten verwendet.
Es kann auch möglich sein, die Methode zur Laufzeit bedingt zu definieren, wenn sie nicht vorhanden ist.
Die vorherigen Antworten sind alle richtig. Ich gehe noch einen Schritt weiter und lasse C # für mich arbeiten, indem ich eine Erweiterungsmethode für String definiere:
public static string[] Split(this string toSplit, string splitOn) {
return toSplit.Split(new string[] { splitOn }, StringSplitOptions.None);
}
Auf diese Weise kann ich es auf eine beliebige Zeichenfolge auf einfache Weise aufrufen, wie ich es beim ersten Versuch, dies zu erreichen, naiv erwartet hatte:
"a big long string with stuff to split on".Split("g str");
string data = "THExxQUICKxxBROWNxxFOX";
return data.Replace("xx","|").Split('|');
Wählen Sie einfach das Ersetzungszeichen sorgfältig aus (wählen Sie eines, das wahrscheinlich noch nicht in der Zeichenfolge enthalten ist)!
Das ist auch einfach:
string data = "THExxQUICKxxBROWNxxFOX";
string[] arr = data.Split("xx".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
Ab .NET Core 2.0 gibt es eine Überschreibung, die eine Zeichenfolge akzeptiert.
Nun können Sie "THExxQUICKxxBROWNxxFOX".Split("xx")
ausführen.