Clase StringTokenizer

La clase StringTokenizer sirve para separar una cadena de caracteres en una serie de elementos o tokens.
Se incluye en el paquete java.util
Los tokens se separan mediante delimitadores.
Los delimitadores por defecto son:
espacio en blanco
tabulador \t
salto de línea \n
retorno \r
avance de página \f
Un objeto StringTokenizer se construye a partir de un objeto String.
Para obetener los tokens del String podemos utilizar los métodos hasMoreTokens() y nextToken().
hasMoreTokens() devuelve true si hay más tokens que obtener en la cadena.
nextToken() devuelve un String con el siguiente token. Lanza una excepción del tipo NoSuchElementException si no hay más tokens.
Otro método importante es countTokens() que devuelve la cantidad de tokens que aun quedan por extraer
Ejemplo de uso de StringTokenizer:
String s = "blanco, rojo, verde y azul";
StringTokenizer st = new StringTokenizer(s);
while (st.hasMoreTokens())
         System.out.println(st.nextToken());
La salida que se obtiene por pantalla es:
blanco,
rojo,
verde
y
azul
Se ha separado el String s en tokens separados por el delimitador por defecto. En este caso el espacio en blanco.
Si lo representamos de forma gráfica, el funcionamiento es el siguiente:
La instrucción
StringTokenizer st = new StringTokenizer(s);
Produce lo siguiente:















Se separa el String en tokens y el objeto st apunta al primero.
A continuación
st.hasMoreTokens()
comprueba si hay tokens que extraer. En este caso st apunta a un token por lo tanto hasMoreTokens() devuelve true.
A continuación
st.nextToken()
Obtiene el token al que apunta st (blanco,) y avanza al siguiente.














El ciclo while repite el proceso.
Cuando se alcanza el último token y se avanza el siguiente la condición del while será false.

Los delimitadores se pueden especificar cuando se crea el objeto StringTokenizer.
Por ejemplo, para indicar que los delimitadores son la coma y el espacio en blanco:
StringTokenizer st = new StringTokenizer("colores rojo, verde y azul", ", ");
La ejecución del while anterior obtendría la salida:
colores
rojo
verde
y
azul
la coma no aparece ya que se ha especificado como delimitador y los delimitadores no aparecen.
Si queremos que aparezcan se debe escribir true como tercer argumento en el constructor:
StringTokenizer st = new StringTokenizer("colores rojo, verde y azul", ", ", true);
En este caso la salida es:
colores

rojo
,

verde

y

azul

4 comentarios:

  1. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  2. Pero en el último apartado ésa no sería la salida, ¿no? Sería ésa si se hubieran tenido en cuenta dos delimitadores: el espacio en blanco y la coma. Pero no es el caso. Daría algo como:

    "colores rojo"
    ", "
    "verde y azul"

    Creo.

    ResponderEliminar
  3. Pero en el último apartado ésa no sería la salida, ¿no? Sería ésa si se hubieran tenido en cuenta dos delimitadores: el espacio en blanco y la coma. Pero no es el caso. Daría algo como:

    "colores rojo"
    ", "
    "verde y azul"

    Creo.

    ResponderEliminar
    Respuestas
    1. Hola Antonio, gracias por el comentario. Fíjate que en ese apartado sí se han tenido en cuenta como delimitadores el espacio y la coma. Entre comillas aparece la coma y un espacio en blanco: ", " por eso produce esa salida.
      Saludos.

      Eliminar