2010-08-18 8 views
0

Есть ли лучший способ читать токены в файле в java? В настоящее время я использую StringTokenizer для разделения токенов. Но в большинстве случаев это может быть довольно неэффективно, поскольку вы должны читать токен с помощью токена.Разделение строк/токенов

Спасибо

+1

* «довольно неэффективно в большинстве случаев, так как вам нужно читать токен с помощью токена» *, как еще вы хотели бы это сделать? Я имею в виду, как еще вы собираетесь «обнаруживать» свои токены, кроме сканирования всей входной строки/потока? –

ответ

3

Если посмотреть на StringTokenizer в Java API, вы заметите, что он рекомендует альтернативу:

StringTokenizer является наследием класс, который сохраняется по причинам совместимости , хотя его использование не рекомендуется в новом коде , Рекомендуется, чтобы любой , ищущий эту функцию, использовал метод splitString или вместо java.util.regex.

Если ни один из этих вариантов удовлетворения ваших потребностей, вы должны смотреть на Scanner, который также поддерживает поиск по шаблону:

Scanner scanner= new Scanner(new File("example.txt")); 
    while (scanner.hasNextLine()) { 
     // do some stuff 
    } 
2

Я думаю, что лучший и наиболее гибкий вариант для этого Guava «s Splitter класса. С его помощью у вас есть большой контроль над тем, как вы разделили строку, и она возвращает Iterable<String> токенов, полученных в результате разделения. Вы точно не указали, что именно вы хотите сделать, для чего токен чтения с помощью токена «неэффективен», но если вы предпочитаете, например, List, вы можете просто преобразовать Iterable в список, используя Lists.newArrayList(Iterable) или ImmutableList.copyOf(Iterable).

+0

это выглядит красиво, мне нравится +1 – ninesided

1

Вам нужно добавить более подробную информацию, но это простые случаи split работает достаточно хорошо.

4

Мне нравится StringUtils.split() в классах в Apache Jakarta. Он позволяет вам писать такой код:

String[] splitStrings = StringUtils.split(unsplitString, "|"); 

Давайте избежим регулярных выражений и будем иметь дело с нулевыми указателями.

Смежные вопросы