it-swarm-pt.tech

O C # possui um String Tokenizer como o Java?

Estou fazendo uma análise simples de entrada de string e preciso de um tokenizador de string. Eu sou novo em C #, mas programou Java e parece natural que o C # tenha um tokenizador de string. Faz isso? Cadê? Como eu uso isso?

65
andrewrk

Você pode usar método 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
        }
    }
}

Para obter mais informações, consulte artigo de Sam Allen sobre divisão de cadeias de caracteres em c # (Desempenho, Regex)

115
Davy Landman

Eu só quero destacar o poder do método Split do C # e fazer uma comparação mais detalhada, principalmente de alguém que tem um background Java.

Enquanto StringTokenizer em Java permite apenas um único delimitador, na verdade, podemos dividir em vários delimitadores, tornando as expressões regulares menos necessárias (embora se alguém precisar de regex, use regex de todos os modos!) Considere, por exemplo, o seguinte:

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

Isso se divide em três delimitadores diferentes, retornando uma matriz de tokens. Também podemos remover matrizes vazias com o que seria um segundo parâmetro para o exemplo acima:

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

Uma coisa que o tokenizer String do Java tem é que acredito que falta o C # (pelo menos Java 7 tem esse recurso) é a capacidade de manter o (s) delimitador (es) como tokens. A divisão de C # descartará os tokens. Isso pode ser importante em alguns aplicativos de PNL, mas para aplicativos de uso geral isso pode não ser um problema.

21
demongolem

O método de divisão de uma string é o que você precisa. De fato, a classe do tokenizer em Java é preterida em favor do método de divisão de cadeia de caracteres do Java.

18
Tim Jarvis

Eu acho que o mais próximo no .NET Framework é

 string.Split () 
3
Steve Morgan

Para uma divisão complexa, você pode usar um regex criando uma coleção de correspondências.

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

Ou

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

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

1
adr

O semelhante ao método Java é:

Regex.Split(string, pattern);

onde

  • string - o texto que você precisa dividir
  • pattern - padrão de tipo de string, o que está dividindo o texto
0
neronovs

leia isto, a função split tem uma sobrecarga, uma matriz consiste em seperators http://msdn.Microsoft.com/en-us/library/system.stringsplitoptions.aspx

0
Musa