Давайте начнем с устранения 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()
.