Lo que se analiza aquí es sobre el método next y el método nextLine en la clase de escáner de Java. ¿Qué son los métodos next() y nextLine()?
El problema ocurre:
Primero veamos el siguiente código: Una entrada y salida de consola simple:
¿Ver copia simple en el portapapeles?
paquete cn.nileader.app.vi;
importar java.util.Scanner;
Prueba de clase pública {
public static void main (String [] args) lanza una excepción {
Escáner cin = nuevo escáner (System.in);
Cadena ni = cin.nextLine();
System.out.print("Utilice el método next() de la clase Scanner para recibir la cadena que acaba de ingresar: "+ni+" y la longitud es "+ni.length());
ni = cin.nextLine();
System.out.print("Utilice el método next() de la clase Scanner para recibir la cadena que acaba de ingresar: "+ni+" y la longitud es "+ni.length());
}
}
paquete cn.nileader.app.vi;
importar java.util.Scanner;
Prueba de clase pública {
public static void main (String [] args) lanza una excepción {
Escáner cin = nuevo escáner (System.in);
Cadena ni = cin.nextLine();
System.out.print("Utilice el método next() de la clase Scanner para recibir la cadena que acaba de ingresar: "+ni+" y la longitud es "+ni.length());
ni = cin.nextLine();
System.out.print("Utilice el método next() de la clase Scanner para recibir la cadena que acaba de ingresar: "+ni+" y la longitud es "+ni.length());
}
}
Mire el siguiente código nuevamente:
¿Ver copia simple en el portapapeles?
paquete cn.nileader.app.vi;
importar java.util.Scanner;
Prueba de clase pública {
public static void main (String [] args) lanza una excepción {
Escáner cin = nuevo escáner (System.in);
Cadena ni = cin.next();
System.out.print("Utilice el método next() de la clase Scanner para recibir la cadena que acaba de ingresar: "+ni+" y la longitud es "+ni.length());
ni = cin.siguiente();
System.out.print("Utilice el método next() de la clase Scanner para recibir la cadena que acaba de ingresar: "+ni+" y la longitud es "+ni.length());
}
}
paquete cn.nileader.app.vi;
importar java.util.Scanner;
Prueba de clase pública {
public static void main (String [] args) lanza una excepción {
Escáner cin = nuevo escáner (System.in);
Cadena ni = cin.next();
System.out.print("Utilice el método next() de la clase Scanner para recibir la cadena que acaba de ingresar: "+ni+" y la longitud es "+ni.length());
ni = cin.siguiente();
System.out.print("Utilice el método next() de la clase Scanner para recibir la cadena que acaba de ingresar: "+ni+" y la longitud es "+ni.length());
}
}
Los fragmentos de código anteriores son todos correctos y aburridos.
Lo maravilloso está por llegar...
Ejecute el siguiente código:
¿Ver copia simple en el portapapeles?
paquete cn.nileader.app.vi;
importar java.util.Scanner;
Prueba de clase pública {
public static void main (String [] args) lanza una excepción {
Escáner cin = nuevo escáner (System.in);
Cadena ni = cin.next();
System.out.println("Usar el método next() de la clase Scanner para recibir la cadena que acaba de ingresar es: "+ni+" y la longitud es "+ni.length());
ni = cin.nextLine();
System.out.print("Utilice el método next() de la clase Scanner para recibir la cadena que acaba de ingresar: "+ni+" y la longitud es "+ni.length());
}
}
paquete cn.nileader.app.vi;
importar java.util.Scanner;
Prueba de clase pública {
public static void main (String [] args) lanza una excepción {
Escáner cin = nuevo escáner (System.in);
Cadena ni = cin.next();
System.out.println("Usar el método next() de la clase Scanner para recibir la cadena que acaba de ingresar es: "+ni+" y la longitud es "+ni.length());
ni = cin.nextLine();
System.out.print("Utilice el método next() de la clase Scanner para recibir la cadena que acaba de ingresar: "+ni+" y la longitud es "+ni.length());
}
}
Los resultados de ejecución son los siguientes:
tendero
Utilice el método next() de la clase Scanner para recibir la cadena que acaba de ingresar: ni comerciante, la longitud es 4
Utilice el método next() de la clase Scanner para recibir la cadena que acaba de ingresar: la longitud es 0
Se acabó, cuando los métodos next y nextLine de Java Scanner se usan juntos,
¡No tienes oportunidad de ingresar a la segunda cadena! ! !
Análisis de problemas:
La diferencia aparente entre el método next y el método nextLine es que el primero lee un "segmento" de caracteres, mientras que el segundo lee una línea de cadenas.
En pocas palabras, la razón del fenómeno anterior se debe principalmente a la irresponsabilidad del método next().
Cómo funciona el método next(): (superficialmente hablando)
Escanee desde una línea hasta que encuentre un identificador específico: un espacio o un carácter de nueva línea (n), y obtenga el carácter (cadena) anterior.
Mire aquí, el primer método next () dice "ni comerciante", pero no lee " n", ni es responsable de los saltos de línea, y luego arroja " n" a nextLine () para su procesamiento.
Como sabe, nextLine () pertenece al tipo de "ver dinero" que acepta "n" cuando lo ve y luego escanea el contenido antes de n, que es una cadena vacía. Entonces algo salió mal.
Resolución de problemas:
¿Ver copia simple en el portapapeles?
paquete cn.nileader.app.vi;
importar java.util.Scanner;
Prueba de clase pública {
public static void main (String [] args) lanza una excepción {
Escáner cin = nuevo escáner (System.in);
Cadena ni = cin.next();
System.out.println("Usar el método next() de la clase Scanner para recibir la cadena que acaba de ingresar es: "+ni+" y la longitud es "+ni.length());
mientras( (ni = cin.nextLine()).equals("") ){}
System.out.print("Utilice el método next() de la clase Scanner para recibir la cadena que acaba de ingresar: "+ni+" y la longitud es "+ni.length());
}
}
paquete cn.nileader.app.vi;
importar java.util.Scanner;
Prueba de clase pública {
public static void main (String [] args) lanza una excepción {
Escáner cin = nuevo escáner (System.in);
Cadena ni = cin.next();
System.out.println("Usar el método next() de la clase Scanner para recibir la cadena que acaba de ingresar es: "+ni+" y la longitud es "+ni.length());
mientras( (ni = cin.nextLine()).equals("") ){}
System.out.print("Utilice el método next() de la clase Scanner para recibir la cadena que acaba de ingresar: "+ni+" y la longitud es "+ni.length());
}
}
Resultados de ejecución:
tendero
Utilice el método next() de la clase Scanner para recibir la cadena que acaba de ingresar: ni comerciante, la longitud es 4
es un genio
Utilice el método next() de la clase Scanner para recibir la cadena que acaba de ingresar: Es un genio y la longitud es 4
Pon el segundo cin.nextLine() original.
Cambiar a while( (ni = cin.nextLine()).equals("") ){}
De esta forma se puede eliminar la influencia de "n" en la línea anterior.