Почнемо з усунення 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().