it-swarm-es.tech

¿C # tiene un Tokenizer de cadena como Java?

Estoy haciendo un análisis de entrada de cadena simple y necesito un tokenizador de cadena. Soy nuevo en C # pero tengo Java programado, y parece natural que C # tenga un tokenizador de cadena. ¿Lo hace? ¿Dónde está? ¿Como lo uso?

64
andrewrk

Podría usar String.Split method .

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 obtener más información, consulte Artículo de Sam Allen acerca de la división de cadenas en c # (Rendimiento, Regex)

114
Davy Landman

Solo quiero resaltar el poder del método Split de C # y ofrecer una comparación más detallada, en particular de alguien que proviene de un entorno Java.

Mientras que StringTokenizer en Java solo permite un solo delimitador, en realidad podemos dividirlo en múltiples delimitadores haciendo que las expresiones regulares sean menos necesarias (aunque si uno necesita expresiones regulares, ¡use expresiones regulares por todos los medios!) Tome, por ejemplo, esto:

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

Esto se divide en tres delimitadores diferentes que devuelven una matriz de tokens. También podemos eliminar matrices vacías con lo que sería un segundo parámetro para el ejemplo anterior:

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

Una cosa que tiene el tokenizer de String de Java es que creo que falta C # (al menos Java 7 tiene esta característica) es la capacidad de mantener los delimitadores como tokens. La división de C # descartará los tokens. Esto podría ser importante, por ejemplo, en algunas aplicaciones de PNL, pero para aplicaciones de propósito más general, esto podría no ser un problema.

20
demongolem

El método de división de una cadena es lo que necesitas. De hecho, la clase de tokenizer en Java está en desuso a favor del método de división de cadenas de Java.

18
Tim Jarvis

Creo que el más cercano en el .NET Framework es

 string.Split () 
3
Steve Morgan

Para la división compleja puede usar una expresión regular creando una colección de coincidencias.

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

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

1
adr

El método similar al de Java es:

Regex.Split(string, pattern);

dónde

  • string- el texto que necesita dividir
  • pattern- patrón de tipo de cadena, lo que está dividiendo el texto
0
neronovs

lea esto, la función dividir tiene una sobrecarga toma una matriz formada por separadores http://msdn.Microsoft.com/en-us/library/system.stringsplitoptions.aspx

0
Musa