it-swarm-eu.dev

Hat C # einen String Tokenizer wie den von Java?

Ich führe ein einfaches Parsing von Zeichenfolgen durch und benötige einen Zeichenfolgen-Tokenizer. Ich bin neu in C #, habe aber Java programmiert, und es scheint natürlich, dass C # einen Zeichenfolgentokenizer haben sollte. Macht es? Wo ist es? Wie benutze ich es?

65
andrewrk

Sie können String.Split-Methode verwenden.

class ExampleClass
{
    public ExampleClass()
    {
        string exampleString = "there is a cat";
        // Split string on spaces. This will separate all the words in a string
        string[] words = exampleString.Split(' ');
        foreach (string Word in words)
        {
            Console.WriteLine(Word);
            // there
            // is
            // a
            // cat
        }
    }
}

Weitere Informationen finden Sie in Sam Allens Artikel über das Aufteilen von Strings in c # (Performance, Regex)

115
Davy Landman

Ich möchte nur die Leistungsfähigkeit der Split - Methode von C # hervorheben und einen detaillierteren Vergleich geben, insbesondere von jemandem, der aus einem Java - Hintergrund stammt.

Während StringTokenizer in Java) nur einen einzelnen Begrenzer zulässt, können wir tatsächlich mehrere Begrenzer aufteilen, wodurch reguläre Ausdrücke weniger erforderlich sind (obwohl man, wenn man Regex benötigt, unbedingt Regex verwenden muss!).

str.Split(new char[] { ' ', '.', '?' })

Dies teilt sich auf drei verschiedene Trennzeichen auf, die eine Reihe von Token zurückgeben. Wir können auch leere Arrays mit einem zweiten Parameter für das obige Beispiel entfernen:

str.Split(new char[] { ' ', '.', '?' }, StringSplitOptions.RemoveEmptyEntries)

Eine Sache, die Javas String-Tokenizer meines Erachtens nicht hat (zumindest Java 7 hat diese Funktion)), ist die Fähigkeit, die Trennzeichen als Token zu behalten. C # 's Split verwirft die Token Dies könnte beispielsweise bei einigen NLP-Anwendungen wichtig sein, bei allgemeineren Anwendungen ist dies jedoch möglicherweise kein Problem.

21
demongolem

Die Aufteilungsmethode eines Strings ist genau das, was Sie brauchen. Tatsächlich wird die Tokenizer-Klasse in Java zugunsten von Javas String-Split-Methode abgelehnt.

18
Tim Jarvis

Ich denke, der nächste in .NET Framework ist

 string.Split () 
3
Steve Morgan

Für eine komplexe Aufteilung können Sie einen regulären Ausdruck verwenden, um eine Übereinstimmungssammlung zu erstellen.

2
Stevo3000
_words = new List<string>(YourText.ToLower().Trim('\n', '\r').Split(' ').
            Select(x => new string(x.Where(Char.IsLetter).ToArray()))); 

Oder

_words = new List<string>(YourText.Trim('\n', '\r').Split(' ').
            Select(x => new string(x.Where(Char.IsLetterOrDigit).ToArray()))); 
2
Skyler

benutze Regex.Split(string,"#|#");

1
adr

Die Java-ähnliche Methode ist:

Regex.Split(string, pattern);

woher

  • string - der zu teilende Text
  • pattern - String-Typ-Muster, was den Text aufteilt
0
neronovs

lesen Sie dies, Split-Funktion hat eine Überladung dauert ein Array aus Trennzeichen http://msdn.Microsoft.com/en-us/library/system.stringsplitoptions.aspx

0
Musa