2008-09-26 28 views
5

Esta debe ser una pregunta clásica de .NET para cualquier persona que migre desde Java.¿Cuáles son los métodos para tokenizar cadenas en .Net?

.NET no parece tener un equivalente directo a java.io.StreamTokenizer, sin embargo, el JLCA proporciona un SupportClass que intenta implementarlo. Creo que el JLCA también proporciona un Tokenizer SupportClass que toma un String como fuente, del cual pensé que se derivaría un StreamTokenizer, pero no lo es.

¿Cuál es la forma preferida de forma de Tokenizar un flujo y una cadena? o hay uno? ¿Cómo se reproducen las transmisiones en .Net? Me gustaría tener la flexibilidad que proporciona java.io.StreamTokenizer. ¿Alguna idea?

+1

Mientras que el OP formuló la pregunta usando un lenguaje indicativo de la solicitud de opinión, el contexto parece claro que no estaba buscando opiniones tanto como equivalencias funcionales a las API de tokenización de Java. La esencia era "Java lo hace de esta manera. ¿Cómo haces lo mismo en .Net?" Esto no es un "¿Qué marco te gusta?" pregunta. Como tal, debe ser reabierto. –

Respuesta

6

No hay nada en .NET que sea completamente equivalente a StreamTokenizer. Para casos simples, puede usar String.Split(), pero para un análisis de token más avanzado, probablemente termine usando System.Text.RegularExpressions.Regex.

+0

No estaba buscando especialmente en todos los lugares desde donde se usaría este Tokenizer ... y tienes razón. La mayoría son lo suficientemente simples para String.Split para ser utilizado. Gracias –

0

Para tokenizar una cadena, use string.Split(...).

1

Hay un señalizador en la biblioteca Nextem - se puede ver un ejemplo aquí: http://trac.assembla.com/nextem/browser/trunk/Examples/Parsing.n

Está implementado como una macro Nemerle, pero se puede escribir esto y luego utilizarlo desde C# fácilmente.

+0

También puede usar la macro Nemerle.Peg: https://code.google.com/p/nemerle/source/browse/nemerle/trunk/snippets/peg-parser/. Se puede descargar aquí: https://code.google.com/p/nemerle –

+0

Parece una excelente biblioteca, eso es para el enlace. – Echilon

4

Use System.String.Split si necesita dividir una cadena basada en una colección de caracteres específicos.

Use System.Text.RegularExpressions.RegEx.Split para partir basado en en patrones coincidentes.

1

No lo creo, para tokenizar muy simple eche un vistazo a System.String.Split().

Tokenización más complejo se puede lograr mediante System.Text.RegularExpressions.Regex.

1

Tuvimos el mismo problema de encontrar un equivalente de StreamTokenizer al transportar tuProlog de Java a C#. Terminamos escribiendo lo que sé que es una conversión directa de StreamTokenizer que toma un TextReader como una "secuencia" para fines de entrada. Encontrará el código en el download for tuProlog.NET 2.1 (licencia LGPL) así que siéntase libre de reutilizarlo y adaptarlo a sus necesidades.

Cuestiones relacionadas