He utilizado StringTokenizer
para obtener las señales de una cadena. Pero consigo dos salidas diferentes cuando traté de imprimir todas las fichas en que StringTokenizer
, utilizando un bucle for y un tiempo de ciclo.
String string="She is an attractive girl, isn't she?";
StringTokenizer stringTokenizer=new StringTokenizer(string,",");
cuando traté de imprimir todas las fichas utilizando un bucle for
for (int i=0;i<stringTokenizer.countTokens();i++)
System.out.println(stringTokenizer.nextToken());
salida
Ella es una chica atractiva
cuando traté de imprimir todas las fichas utilizando un bucle while
while (stringTokenizer.hasMoreElements())
System.out.println(stringTokenizer.nextToken());
salida
Ella es una chica atractiva
No es ella?
Quiero saber por qué el bucle while da los esperados dos fichas y el bucle no da las dos fichas.
El countTokens()
valor está disminuyendo a medida que llame nextToken()
. En la primera carrera countTokens()
está regresando 2
a las dos entradas encontradas. Cuando se llama nextToken()
la primera vez que este número se reduce a 1
, ya que sólo hay una entrada por la izquierda para leer. Pero esto significa que el for
bucle se traducirá en
for (int i=0; i<1; i++)
Y la for
variable de bucle i
ya está a su valor 1
. Por lo tanto, ya que 1<1
es false
su for
termina bucle sin leer la segunda entrada.
Puede guardar el recuento de fichas en una variable y luego utilizarlo en su for
bucle.
int count = stringTokenizer.countTokens();
for (int i=0; i<count; i++) {
System.out.println(stringTokenizer.nextToken());
}
De esta manera el countTokens()
método se llama una sola vez (con el valor correcto) y no después de cada nextToken()
llamada con la disminución del recuento símbolo restante.