Comencemos por eliminar StringTokenizer
. Se está haciendo viejo y ni siquiera admite expresiones regulares. Su documentación establece:
StringTokenizer
es una clase heredada que se retiene por razones de compatibilidad, aunque se desaconseja su uso en nuevos códigos. Se recomienda que cualquiera que busque esta funcionalidad use el split
método String
o el java.util.regex
paquete en su lugar.
Así que vamos a tirarlo de inmediato. Eso se va split()
y Scanner
. ¿Cual es la diferencia entre ellos?
Por un lado, split()
simplemente devuelve una matriz, lo que facilita el uso de un bucle foreach:
for (String token : input.split("\\s+") { ... }
Scanner
se construye más como una secuencia:
while (myScanner.hasNext()) {
String token = myScanner.next();
...
}
o
while (myScanner.hasNextDouble()) {
double token = myScanner.nextDouble();
...
}
(Tiene una API bastante grande , así que no pienses que siempre está restringido a cosas tan simples).
Esta interfaz de estilo de transmisión puede ser útil para analizar archivos de texto simples o entradas de consola, cuando no tiene (o no puede obtener) toda la entrada antes de comenzar a analizar.
Personalmente, el único momento que recuerdo haber usado Scanner
es para proyectos escolares, cuando tuve que obtener la entrada del usuario desde la línea de comandos. Hace que este tipo de operación sea fácil. Pero si tengo una con la String
que quiero separarme, es casi una obviedad split()
.