Каковы методы токенизации строк в .Net?
Вопрос
Это, должно быть, классический вопрос .NET для всех, кто переходит с Java.
.NET, похоже, не имеет прямого эквивалента java.io.StreamTokenizer, однако JLCA предоставляет класс поддержки, который пытается его реализовать.Я полагаю, что JLCA также предоставляет класс поддержки Tokenizer, который принимает строку в качестве источника, из которого, как я думал, будет получен StreamTokenizer, но это не так.
Что такое предпочтительный способ маркировать как поток, так и строку?или он вообще есть? Как потоки маркируются в .Net?Я хотел бы обладать гибкостью, которую предоставляет java.io.StreamTokenizer.Есть какие-нибудь мысли?
Решение
В .NET нет ничего, что было бы полностью эквивалентно StreamTokenizer.Для простых случаев вы можете использовать String .Split() , но для более сложного анализа токенов вы, вероятно, в конечном итоге будете использовать System.Text.Регулярные выражения.Регулярное выражение.
Другие советы
Используйте System.String.Разделить, если вам нужно разделить строку на основе набора определенных символов.
Используйте System.Text.RegularExpressions.Регулярное выражение.Split для разделения на основе совпадающих шаблонов.
В библиотеке Nextem есть токенизатор - вы можете увидеть пример здесь: http://trac.assembla.com/nextem/browser/trunk/Examples/Parsing.n
Он реализован как макрос Nemerle, но вы можете написать это, а затем легко использовать на C #.
Я так не думаю, для очень простой токенизации взгляните на System.String .Split() .
Более сложная токенизация может быть достигнута с помощью System.Text.RegularExpressions.Regex.
У нас была такая же проблема с поиском эквивалента StreamTokenizer при переносе tuProlog с Java на C #.В итоге мы написали то, что, насколько я знаю, является прямым преобразованием StreamTokenizer, которое использует TextReader в качестве "потока" для целей ввода.Вы найдете код в скачать для tuProlog.NET 2.1 (Лицензия LGPL), поэтому не стесняйтесь повторно использовать и адаптировать его к вашим потребностям.
Чтобы обозначить строку, используйте string.Split(...)
.