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     

8 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
  4. Y si lo que quiero es que despues de la coma agregue el espacio y la coma sigua estando en su lugar.
    colores rojo,
    verde y azul

    ResponderEliminar
  5. Utilice los métodos básicos de la clase StringTokenizer; nextToken(), hasMoreTokens(),
    countTokens(). En esta ocasión voy a mostrar el uso de tres métodos de la clase StringTokenizer,
    a partir del siguiente string, y dividir por los siguientes delimitadores: ”@*$# ”
    String cuentas="1@ACTIVO.*1$no#"+
    "11@ACTIVO CORRIENTE.*1$no#"+
    "111@EFECTIVO Y OTROS MEDIOS LÍQUIDOS.*1$no#"+
    "1111@Disponibles.*1$no#"+
    "111101@Caja.*1$si#"+
    "111102@Fondo Fijo.*1$si#"+
    "111103@Caja moneda extranjera.*1$si#"+
    "111104@Valores por depositar.*1$si#"+
    "1112@Bancos.*1$no#"+
    "111201@Banco Regional Cta. Cte.*1$si#"+
    "111202@Banco Regional Caja de ahorro.*1$si#"+
    "111203@Banco Fomento Cta. Cte.*1$si#"+
    "111204@Banco Fomento Caja de ahorro.*1$si#"+
    "111205@Banco Continental Cta. Cte.*1$si#"+
    "111206@Banco Continental Caja de ahorro.*1$si#"+
    "111207@Banco Itapúa Cta. Cte.*1$si#"+
    "111208@Banco Itapúa Caja de ahorro.*1$si#"+
    "1113@Otros equivalentes al efectivo.*1$no#"+
    "111301@Banco Regional plazo fijo.*1$si#"+
    "111302@Banco Regional certificado de depósito de ahorro.*1$si#"+
    "111303@Banco Fomento plazo fijo.*1$si#"+
    "111304@Banco Fomento certificado de depósito de ahorro.*1$si#";

    ResponderEliminar
  6. me sirvio para entender un programa rsa de cifrado

    ResponderEliminar
  7. StringTokenizer Palabra = new StringTokenizer(A.nextLine(), "+-*/=.;(){}[] ", true);

    con eso separa una cadena por distintos tokens, pero no logro agregar el salto de linea como token, ¿que debería agregar?
    Gracias de antemano

    ResponderEliminar