¿Por qué es StringTokenizer dando diferentes salidas cuando se utiliza en un bucle while y un bucle?

campos bhashwara pra:

He utilizado StringTokenizerpara 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.

progman:

El countTokens()valor está disminuyendo a medida que llame nextToken(). En la primera carrera countTokens()está regresando 2a 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 forbucle se traducirá en

for (int i=0; i<1; i++)

Y la forvariable de bucle iya está a su valor 1. Por lo tanto, ya que 1<1es falsesu fortermina bucle sin leer la segunda entrada.

Puede guardar el recuento de fichas en una variable y luego utilizarlo en su forbucle.

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.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=364598&siteId=1
Recomendado
Clasificación