Estoy haciendo un análisis simple de entrada de cadena y estoy necesitando un tokenizador de cadena. Soy nuevo en C# pero he programado Java, y parece natural que C# tenga un tokenizador de cadenas. ¿Lo hace? ¿Dónde está? ¿Como lo uso?¿Tiene C# un Tokenizer de cadenas como el de Java?
Respuesta
Puede 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 más información ver Sam Allen's article about splitting strings in c# (Rendimiento, Regex)
creo que el más cercano en el .NET Framework es
string.Split()
El método de escisión de una cadena es lo que necesita. De hecho, la clase tokenizer en Java está en desuso en favor del método de división de cadenas de Java.
AFA, es de hecho obsoleto, pero no a favor del método 'String # split'. Más o menos a favor de la clase 'Scanner'. – bvdb
para la división compleja que podría utilizar una expresión regular la creación de una colección partido.
Si está utilizando C# 3.5 puede escribir un método de extensión para System.String que hace la división que necesita. A continuación, a continuación, puede utilizar la sintaxis:
string.SplitByMyTokens();
Más información y un ejemplo útil de MS aquí http://msdn.microsoft.com/en-us/library/bb383977.aspx
Esta es una solución a un problema local, no una operación obvia/de propósito general System.String. Una clase de utilidad podría estar en orden, pero sería un método de extensión abusivo usar aquí un método de extensión. –
leer esto, función de división tiene una sobrecarga toma una matriz consta de separadores http://msdn.microsoft.com/en-us/library/system.stringsplitoptions.aspx
Solo quiero resaltar el poder del método Split de C# y brindar una comparación más detallada, particularmente de alguien que proviene de un backgrou de Java Dakota del Norte.
Mientras StringTokenizer en Java sólo permite un único delimitador, en realidad podemos dividir en múltiples delimitadores hacer expresiones regulares menos necesario (aunque si uno necesita de expresiones regulares, el uso de expresiones regulares por todos los medios!) Tomemos, por ejemplo, esto:
str.Split(new char[] { ' ', '.', '?' })
Esto se divide en tres delimitadores diferentes que devuelven una matriz de tokens. También podemos eliminar las matrices vacías con lo que sería un segundo parámetro para el ejemplo anterior:
str.Split(new char[] { ' ', '.', '?' }, StringSplitOptions.RemoveEmptyEntries)
Una cosa tokenizer cadena de Java no tiene que creo que C# es deficiente (al menos Java 7 tiene esta característica) es la capacidad para mantener los delimitadores como tokens. C# 's Split descartará los tokens. Esto podría ser importante, por ejemplo, en algunas aplicaciones NLP, pero para aplicaciones más generales, esto podría no ser un problema.
_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())));
El método similar al de Java es:
Regex.Split(string, pattern);
donde
string
- el texto necesita dividirpattern
- cadena de patrón de tipo, lo que se está dividiendo el texto
O String.Split para una tokenización más simple. –
Si usted está tratando de hacer algo como argumentos de línea de comando de la división en una aplicación de consola .NET, vas a tener problemas porque es bien .NET roto o está tratando de ser inteligente (lo que significa que es tan bueno como roto). Necesitaba poder dividir los argumentos por el carácter de espacio, conservando los literales que se citaban para que no se dividieran en el medio. Este es el código que he escrito para hacer el trabajo:
private static List<String> Tokenise(string value, char seperator)
{
List<string> result = new List<string>();
value = value.Replace(" ", " ").Replace(" ", " ").Trim();
StringBuilder sb = new StringBuilder();
bool insideQuote = false;
foreach(char c in value.ToCharArray())
{
if(c == '"')
{
insideQuote = !insideQuote;
}
if((c == seperator) && !insideQuote)
{
if (sb.ToString().Trim().Length > 0)
{
result.Add(sb.ToString().Trim());
sb.Clear();
}
}
else
{
sb.Append(c);
}
}
if (sb.ToString().Trim().Length > 0)
{
result.Add(sb.ToString().Trim());
}
return result;
}
- 1. tokenizer de cadenas en Java
- 2. Tokenizer de cadenas para CPP String?
- 3. Int tokenizer
- 4. Manera pitónica de implementar un tokenizer
- 5. Boost tokenizer para tratar cadena citada como un token
- 6. String tokenizer en Objective-C para el desarrollo de aplicaciones de iPhone
- 7. Boost :: tokenizer separados por comas (C++)
- 8. ¿Por qué Java no tiene ningún destructor como C++?
- 9. stanford nlp tokenizer
- 10. sqlite-fts3: tokenizer personalizado?
- 11. ¿Tiene C# un equivalente de clase anidada estática de Java?
- 12. ¿Tiene Python un modificador de "solo compilar" como Perl's -c?
- 13. does python tiene un operador de coma como C
- 14. ¿Java tiene el modo de compilación 'Debug' y 'Release' como C#?
- 15. ¿Tiene Java un equivalente a Environment.GetCommandLineArgs() de C#?
- 16. boost :: tokenizer vs boost :: split
- 17. ¿Objective-C tiene un recolector de basura en el iPhone?
- 18. ¿PHP tiene una máquina virtual como Java?
- 19. Java equivalente de las cadenas verbales de C# con @
- 20. ¿Tiene R una cola de prioridad como PriorityQueue de Java?
- 21. Usando boost :: tokenizer con delimitadores de cadena
- 22. ¿Java tiene un equivalente de referencia constante?
- 23. Cadenas de formato en java
- 24. devolver una lista de cadenas como JSONResult
- 25. ¿Tiene Python algo así como clases internas anónimas de Java?
- 26. Biblioteca de cadenas C
- 27. Reutilización de cadenas en java?
- 28. Extraer cadenas de Java Clases
- 29. ¿Scala/java tiene algo así como StringIO de python?
- 30. java lucene analizador personalizado y tokenizer creando un problema en las compensaciones de termvector?
misma pregunta: http://stackoverflow.com/questions/1134311/c-tokenizer-keeping-the-seperators – Mikhail