it-swarm.com.de

Teilen Sie eine Zeichenfolge durch eine andere Zeichenfolge in C #

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

614
Brandon

Um durch eine Zeichenfolge zu trennen, müssen Sie String-Array-Überladung verwenden.

string data = "THExxQUICKxxBROWNxxFOX";

return data.Split(new string[] { "xx" }, StringSplitOptions.None);
1118
Adam Robinson

Es gibt ein Überladung von Split , das Zeichenfolgen akzeptiert.

"THExxQUICKxxBROWNxxFOX".Split(new [] { "xx" }, StringSplitOptions.None);

Sie können eine dieser StringSplitOptions verwenden

  • Keine - Der Rückgabewert enthält Array-Elemente, die eine leere Zeichenfolge enthalten
  • RemoveEmptyEntries - Der Rückgabewert enthält keine Array-Elemente, die eine leere Zeichenfolge enthalten

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.

111
Greg
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.

65
Peter

Dafür gibt es eine Überladung von String.Split :

"THExxQUICKxxBROWNxxFOX".Split(new [] {"xx"}, StringSplitOptions.None);
43
bruno conde

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.

21
Lorenz Lo Sauer

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

6
SNag

Das ist auch einfach:

string data = "THExxQUICKxxBROWNxxFOX";
string[] arr = data.Split("xx".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
1
user890255

Ab .NET Core 2.0 gibt es eine Überschreibung, die eine Zeichenfolge akzeptiert.

Nun können Sie "THExxQUICKxxBROWNxxFOX".Split("xx") ausführen.

Siehe https://docs.Microsoft.com/en-us/dotnet/api/system.string.split?view=netcore-2.0#System_String_Split_System_String_System_StringSplitOptions_

0
Danation