it-swarm.it

C # ha un Tokenizer per stringhe come quello di Java?

Sto eseguendo un semplice analisi dell'input di stringa e ho bisogno di un tokenizer di stringa. Sono nuovo di C # ma ho programmato Java e sembra naturale che C # abbia un tokenizer di stringa. Vero? Dov'è? Come lo uso?

65
andrewrk

È possibile utilizzare metodo String.Split .

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
        }
    }
}

Per ulteriori informazioni, vedere Articolo di Sam Allen sulla divisione delle stringhe in c # (Performance, Regex)

115
Davy Landman

Voglio solo evidenziare la potenza del metodo Split di C # e dare un confronto più dettagliato, in particolare da parte di qualcuno che proviene da uno sfondo Java.

Mentre StringTokenizer in Java consente solo un singolo delimitatore, possiamo effettivamente dividere su più delimitatori rendendo meno necessarie le espressioni regolari (anche se se si ha bisogno di regex, usare regex con tutti i mezzi!) Prendiamo ad esempio questo:

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

Questo si divide su tre diversi delimitatori restituendo una matrice di token. Possiamo anche rimuovere matrici vuote con quello che sarebbe un secondo parametro per l'esempio sopra:

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

Una cosa che il tokenizer String di Java ha che credo che manchi C # (almeno Java 7 ha questa funzione) è la capacità di mantenere i delimitatori come token. La divisione di C # eliminerà i token. Questo potrebbe essere importante per dire alcune applicazioni NLP, ma per applicazioni più generiche questo potrebbe non essere un problema.

21
demongolem

Il metodo split di una stringa è ciò di cui hai bisogno. In effetti la classe tokenizer in Java è obsoleta a favore del metodo di suddivisione delle stringhe di Java.

18
Tim Jarvis

Penso che il più vicino in .NET Framework sia

 String.split () 
3
Steve Morgan

Per divisioni complesse è possibile utilizzare una regex creando una raccolta di corrispondenze.

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

O

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

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

1
adr

Il simile al metodo Java è:

Regex.Split(string, pattern);

dove

  • string - il testo che devi dividere
  • pattern - modello di tipo stringa, ciò che sta dividendo il testo
0
neronovs

leggi questo, la funzione split ha un sovraccarico prende un array composto da separatori http://msdn.Microsoft.com/en-us/library/system.stringsplitoptions.aspx

0
Musa