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