Cominciamo eliminando StringTokenizer
. Sta invecchiando e non supporta nemmeno le espressioni regolari. La sua documentazione afferma:
StringTokenizer
è una classe legacy che viene mantenuta per motivi di compatibilità sebbene il suo utilizzo sia sconsigliato nel nuovo codice. Si consiglia a chiunque cerchi questa funzionalità di utilizzare invece il split
metodo String
o il java.util.regex
pacchetto.
Quindi buttiamolo subito. Che lascia split()
e Scanner
. Qual è la differenza tra loro?
Per prima cosa, split()
restituisce semplicemente un array, il che semplifica l'uso di un ciclo foreach:
for (String token : input.split("\\s+") { ... }
Scanner
è costruito più come uno stream:
while (myScanner.hasNext()) {
String token = myScanner.next();
...
}
o
while (myScanner.hasNextDouble()) {
double token = myScanner.nextDouble();
...
}
(Ha un'API piuttosto grande , quindi non pensare che sia sempre limitato a cose così semplici.)
Questa interfaccia in stile stream può essere utile per analizzare semplici file di testo o input della console, quando non hai (o non riesci a ottenere) tutti gli input prima di iniziare l'analisi.
Personalmente, l'unica volta che ricordo di aver usato Scanner
è per i progetti scolastici, quando ho dovuto ottenere l'input dell'utente dalla riga di comando. Rende facile questo tipo di operazione. Ma se ne ho uno String
che voglio dividere, è quasi un gioco da ragazzi split()
.