Cómo utilizar Scanner en Java

How Use Scanner Java



El escáner en Java es una clase en el paquete java.util. Esta clase tiene como objetivo leer la entrada de una cadena, el teclado, el archivo o el conector de red. Este artículo se concentra solo en leer la entrada del teclado y mostrar el resultado en la ventana del terminal. Se pueden utilizar ideas similares para leer la entrada del archivo o canal de red. El escáner no imprime en la ventana del terminal. Para imprimir en la terminal, use el objeto System.out. Es sencillo utilizar este objeto para imprimir en el terminal, como se ilustra a continuación.

Para usar la clase Scanner, primero debe importarse. Después de eso, se debe crear una instancia de un objeto a partir de él. Después de usar el objeto Escáner, debe cerrarse. El objeto de flujo de entrada que representa el teclado es System.in. El escáner tiene muchos métodos. En este artículo solo se explicarán los de uso común.







Contenido del artículo



Uso sencillo de la clase de escáner

El siguiente código le pide al usuario que escriba una oración y luego muestra la oración:



importar java.util.Scanner;

público claseLa clase{
público estático vacíoprincipal( Cuerda []argumentos) {
Escáner scanObj= nuevoEscáner( Sistema .en);
Sistema .fuera.println('Escribe una oración y presiona Enter:');

Cuerda frase=scanObj.línea siguiente();
Sistema .fuera.println(frase);

scanObj.cerrar();
}
}

La primera línea importa la clase Scanner. En la función principal, la primera línea crea un objeto de escáner usando el objeto System.in para el teclado. Tan pronto como se crea el objeto del escáner, comienza a esperar la entrada. La siguiente línea imprime una declaración, pidiendo al usuario que escriba una oración. La siguiente línea en el código usa el método nextLine () del objeto del escáner para leer la oración del usuario después de presionar Enter. La línea posterior, en el código, vuelve a imprimir la oración en la ventana de terminal. La última línea cierra el objeto del escáner.





Escupir la línea de entrada en valores

El siguiente código divide la línea de entrada en palabras (tokens), usando el espacio como delimitador:

importar java.util.Scanner;

público claseLa clase{
público estático vacíoprincipal( Cuerda []argumentos) {
Escáner scanObj= nuevoEscáner( Sistema .en);
Sistema .fuera.println('Escriba una línea de tokens y presione Entrar:');

tiempo(scanObj.hasNext()){
Sistema .fuera.println(scanObj.Siguiente());
}

scanObj.cerrar();
}
}

hasNext () y next () son otros dos métodos del objeto del escáner. Cuando el objeto del escáner lee una línea, la mantiene. next () accede al siguiente token (palabra). hasNext () devuelve verdadero si aún no se ha accedido a otro token.



Desafortunadamente, todavía se espera que el usuario escriba una entrada para dividir y volver a mostrar con este código. Para terminar con todo eso, presione Ctrl + z, y debería estar de vuelta en el símbolo del sistema.

En el código anterior, el delimitador separa los tokens en el espacio. Se puede utilizar otro carácter. El siguiente código usa la coma. No olvide presionar Ctrl + z para finalizar el ciclo si prueba el código.

importar java.util.Scanner;

público claseLa clase{
público estático vacíoprincipal( Cuerda []argumentos) {
Escáner scanObj= nuevoEscáner( Sistema .en);
Sistema .fuera.println('Escriba una línea de tokens y presione Entrar:');

scanObj.useDelimiter(',');

tiempo(scanObj.hasNext()){
Sistema .fuera.println(scanObj.Siguiente());
}

scanObj.cerrar();
}
}

Si probó el código, habría notado que los espacios en los tokens se han incluido como parte de los tokens (salida). La expresión, scanObj.useDelimiter (,); escrito después de que se haya leído la línea de entrada; es lo que hace la coma, el delimitador.

Lectura y validación de tipos de datos primitivos

método nextBoolean ()

En el siguiente código, se espera que el usuario escriba verdadero o falso sin las comillas y luego presione la tecla Intro. Si el usuario escribe algo más, como sí o no, se mostrará un mensaje de error.

importar java.util.Scanner;

público claseLa clase{
público estático vacíoprincipal( Cuerda []argumentos) {
Sistema .fuera.impresión('¿Tienes más de 24? ');
Escáner scanObj= nuevoEscáner( Sistema .en);

booleanolicenciado en Derecho=scanObj.siguienteBooleano();
si (licenciado en Derecho== cierto) {
Sistema .fuera.println('Tienes más de 24');
}
demás si (licenciado en Derecho== falso) {
Sistema .fuera.println('Tienes menos de 24');
}

scanObj.cerrar();
}
}

Dado que java emitirá un mensaje de error siempre que la entrada no sea verdadera o falsa exactamente, se ha utilizado else if en lugar de else.

La diferencia entre los métodos, print e println, es que print espera la entrada en la línea actual, mientras que println espera la entrada en la línea siguiente.

método nextByte ()

Con el juego de caracteres ASCII, un carácter es un byte. Sin embargo, con algunos juegos de caracteres orientales, un carácter puede constar de más de un byte. Independientemente del juego de caracteres, el método nextByte lee y valida el siguiente byte de la entrada. El siguiente código se puede utilizar para este propósito:

importar java.util.Scanner;

público claseLa clase{
público estático vacíoprincipal( Cuerda []argumentos) {
Sistema .fuera.impresión('Teclea un número<128, press Enter: ');
Escáner scanObj= nuevoEscáner( Sistema .en);

bytebt=scanObj.nextByte();
Sistema .fuera.println(bt);

scanObj.cerrar();
}
}

Si se ingresa un número mayor que 127 o un carácter alfabético para este código, se emitirá un mensaje de error.

Método nextInt ()

El siguiente token entero como entrada también se puede validar y aceptar. Se puede utilizar el siguiente código:

importar java.util.Scanner;

público claseLa clase{
público estático vacíoprincipal( Cuerda []argumentos) {
Sistema .fuera.impresión('Ingrese cualquier entero:');
Escáner scanObj= nuevoEscáner( Sistema .en);

En ten uno=scanObj.nextInt();
Sistema .fuera.println(en uno);

scanObj.cerrar();
}
}

Se han eliminado los espacios iniciales o finales. Para este código, se aceptará cualquier valor entero, incluidos los valores superiores a 127. Con estos métodos nextXXX (), una vez que falla la validación, se emite un mensaje de error.

Método nextBigInteger ()

Parece que los ingenieros de software nunca dejarán de inventar cosas nuevas. Un entero grande es un número entero cuyo valor es mucho mayor que el de un entero. Sin embargo, con Java, se puede leer de la misma forma que el entero. El siguiente código ilustra esto:

importar java.util.Scanner;
importar java.math.BigInteger;

público claseLa clase{
público estático vacíoprincipal( Cuerda []argumentos) {
Sistema .fuera.println('Ingrese cualquier número entero para un entero grande:');
Escáner scanObj= nuevoEscáner( Sistema .en);

BigInteger en uno=scanObj.nextBigInteger();
Sistema .fuera.println(en uno);

scanObj.cerrar();
}
}

Tenga en cuenta la declaración de importación, import java.math.BigInteger ;. Además, tenga en cuenta que el tipo de entero grande comienza con una B mayúscula y no una b minúscula.

Método nextFloat ()

El siguiente token flotante como entrada también se puede validar y aceptar. Se puede utilizar el siguiente código:

importar java.util.Scanner;

público claseLa clase{
público estático vacíoprincipal( Cuerda []argumentos) {
Sistema .fuera.impresión('Ingrese cualquier Flotador:');
Escáner scanObj= nuevoEscáner( Sistema .en);

flotadoren uno=scanObj.nextFloat();
Sistema .fuera.println(en uno);

scanObj.cerrar();
}
}

Un ejemplo de un número flotante es 23.456. Se han eliminado los espacios iniciales o finales.

nextDouble ()

El siguiente token doble como entrada también se puede validar y aceptar. Se puede utilizar el siguiente código:

importar java.util.Scanner;

público claseLa clase{
público estático vacíoprincipal( Cuerda []argumentos) {
Sistema .fuera.impresión('Introduzca cualquier doble:');
Escáner scanObj= nuevoEscáner( Sistema .en);

dobleen uno=scanObj.siguienteDoble();
Sistema .fuera.println(en uno);

scanObj.cerrar();
}
}

Un ejemplo de un número doble es 23.456. Un número doble es diferente de un flotante porque tiene menos margen de error. Se han eliminado los espacios iniciales o finales.

método nextLine ()

El método nextLine () es para una cadena. Si la cadena es la línea de entrada del teclado después de presionar Enter, puede tener el carácter de nueva línea, ' n'. Se puede utilizar el siguiente código:

importar java.util.Scanner;

público claseLa clase{
público estático vacíoprincipal( Cuerda []argumentos) {
Sistema .fuera.println('Introduzca una línea que tenga\n: ');
Escáner scanObj= nuevoEscáner( Sistema .en);

Cuerda pag=scanObj.línea siguiente();
Sistema .fuera.println(pag);

scanObj.cerrar();
}
}

Observe que el tipo de cadena comienza con la S mayúscula y no la s minúscula.

Los métodos nextLine (), hasNext () y next () se han utilizado anteriormente en este artículo. El escáner tiene otros métodos y otros métodos de datos primitivos; consulte más adelante.

Asignar entrada a una variable

La entrada se puede asignar a una variable, como muestra el siguiente código:

importar java.util.Scanner;

público claseLa clase{
público estático vacíoprincipal( Cuerda []argumentos) {
Escáner scanObj= nuevoEscáner( Sistema .en);

Sistema .fuera.impresión('Ingrese su nombre: ');
Cuerda nombre=scanObj.línea siguiente();

Sistema .fuera.impresión('Ingrese la edad:');
En tla edad=scanObj.nextInt();

Sistema .fuera.impresión('Ingrese salario:');
doblesalario=scanObj.siguienteDoble();

Sistema .fuera.println('Nombre: ' +nombre+ ', La edad: ' +la edad+ ', Salario: ' +salario);

scanObj.cerrar();
}
}

Conclusión

El escáner en Java es una clase en el paquete java.util. Esta clase tiene como objetivo leer la entrada de una cadena, el teclado, el archivo o el conector de red. Este artículo se ha concentrado principalmente en leer la entrada del teclado y mostrar el resultado en la ventana del terminal. Se pueden usar ideas similares para leer la entrada de la cadena, archivo o canal de red.

Para leer toda la línea de entrada del teclado, use el método nextLine (). La línea como una cadena se puede dividir en tokens, usando los métodos hasNext () y next (), y el ciclo while. El delimitador predeterminado para dividir es el espacio, pero el programador puede elegir otro delimitador. No olvide hacer Ctrl + z para detener el ciclo while, si es necesario. Se pueden eliminar los espacios iniciales y finales mediante otros esquemas que no se tratan en este artículo. La validación de los tokens también se puede realizar utilizando otros esquemas que no se abordan en este artículo.

Los valores primitivos se pueden leer usando nextBoolean (), nextByte (), nextInt (), etc. Estos métodos nextXXX () hacen validación y también eliminan los espacios iniciales y finales.

Java Scanner tiene muchos más métodos. Sin embargo, el uso básico del escáner se ha explicado en este artículo. En realidad, la selección de un token se realiza mediante técnicas de expresión regular. El uso de técnicas de expresión regular se discutirá, para otro momento.