Zacznijmy od wyeliminowania StringTokenizer
. Starzeje się i nie obsługuje nawet wyrażeń regularnych. Jego dokumentacja stwierdza:
StringTokenizer
jest starszą klasą, która jest zachowywana ze względu na kompatybilność, chociaż jej użycie jest odradzane w nowym kodzie. Zaleca się, aby każdy, kto szuka tej funkcji, używał split
metody String
lub java.util.regex
pakietu.
Więc wyrzućmy to od razu. To pozostawia split()
i Scanner
. Jaka jest między nimi różnica?
Po pierwsze, split()
po prostu zwraca tablicę, co ułatwia korzystanie z pętli foreach:
for (String token : input.split("\\s+") { ... }
Scanner
jest zbudowany bardziej jak strumień:
while (myScanner.hasNext()) {
String token = myScanner.next();
...
}
lub
while (myScanner.hasNextDouble()) {
double token = myScanner.nextDouble();
...
}
(Ma dość duże API , więc nie myśl, że zawsze ogranicza się do tak prostych rzeczy).
Ten interfejs w stylu strumieniowym może być przydatny do analizowania prostych plików tekstowych lub danych wejściowych konsoli, gdy nie masz (lub nie możesz uzyskać) wszystkich danych wejściowych przed rozpoczęciem analizowania.
Osobiście pamiętam tylko jeden raz, kiedy korzystałem Scanner
z projektów szkolnych, kiedy musiałem uzyskać dane wejściowe użytkownika z wiersza poleceń. To sprawia, że tego rodzaju operacja jest łatwa. Ale jeśli mam coś String
, z czym chcę się rozstać, to prawie nie ma sensu split()
.