Давайте начнем с исключения StringTokenizer
. Он стареет и даже не поддерживает регулярные выражения. Его документация гласит:
StringTokenizer
- это устаревший класс, который сохраняется по соображениям совместимости, хотя его использование не рекомендуется в новом коде. Всем, кто ищет эту функцию, рекомендуется использовать метод split
из String
или пакет java.util.regex
.
Итак, давайте выбросим это прямо сейчас. Это оставляет split()
и Scanner
. В чем разница между ними?
С одной стороны, split()
просто возвращает массив, что упрощает использование цикла foreach:
for (String token : input.split("\\s+") { ... }
Scanner
построен больше как поток:
while (myScanner.hasNext()) {
String token = myScanner.next();
...
}
или
while (myScanner.hasNextDouble()) {
double token = myScanner.nextDouble();
...
}
(У него довольно большой API , поэтому не думайте, что он всегда ограничен такими простыми вещами.)
Этот интерфейс в стиле потока может быть полезен для анализа простых текстовых файлов или ввода с консоли, когда у вас нет (или вы не можете получить) всего ввода перед началом анализа.
Лично я могу вспомнить только один раз, когда использую Scanner
, для школьных проектов, когда мне приходилось получать пользовательский ввод из командной строки. Это делает такую операцию легкой. Но если у меня есть String
, который я хочу разделить, то с split()
.
идти почти не сложно.