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:
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
Este comentario ha sido eliminado por el autor.
ResponderEliminarPero 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:
ResponderEliminar"colores rojo"
", "
"verde y azul"
Creo.
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:
ResponderEliminar"colores rojo"
", "
"verde y azul"
Creo.
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.
EliminarSaludos.
Y si lo que quiero es que despues de la coma agregue el espacio y la coma sigua estando en su lugar.
ResponderEliminarcolores rojo,
verde y azul
Utilice los métodos básicos de la clase StringTokenizer; nextToken(), hasMoreTokens(),
ResponderEliminarcountTokens(). 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#";
me sirvio para entender un programa rsa de cifrado
ResponderEliminarStringTokenizer Palabra = new StringTokenizer(A.nextLine(), "+-*/=.;(){}[] ", true);
ResponderEliminarcon eso separa una cadena por distintos tokens, pero no logro agregar el salto de linea como token, ¿que debería agregar?
Gracias de antemano