¿Cómo puedo leer la entrada desde la consola usando la clase Scanner en Java?
¿ Cómo podría leer la entrada desde la consola usando la Scanner
clase? Algo como esto:
System.out.println("Enter your username: ");
Scanner = input(); // Or something like this, I don't know the code
Básicamente, todo lo que quiero es que el escáner lea una entrada para el nombre de usuario y asigne la entrada a una String
variable.
Un ejemplo sencillo para ilustrar cómo java.util.Scanner
funciona sería leer un único número entero de System.in
. Es realmente bastante simple.
Scanner sc = new Scanner(System.in);
int i = sc.nextInt();
Para recuperar un nombre de usuario probablemente usaría sc.nextLine()
.
System.out.println("Enter your username: ");
Scanner scanner = new Scanner(System.in);
String username = scanner.nextLine();
System.out.println("Your username is " + username);
También puede usarlo next(String pattern)
si desea tener más control sobre la entrada o simplemente validar la username
variable.
Encontrará más información sobre su implementación en la documentación API parajava.util.Scanner
Scanner scan = new Scanner(System.in);
String myLine = scan.nextLine();
Lectura de datos desde la consola
BufferedReader
está sincronizado, por lo que las operaciones de lectura en un BufferedReader se pueden realizar de forma segura desde varios subprocesos. Se puede especificar el tamaño del búfer o se puede utilizar el tamaño predeterminado ( 8192 ). El valor predeterminado es lo suficientemente grande para la mayoría de los propósitos.readLine() « simplemente lee los datos línea por línea de la secuencia o fuente. Se considera que una línea termina en cualquiera de estos: \n, \r (o) \r\n
Scanner
divide su entrada en tokens usando un patrón delimitador, que de forma predeterminada coincide con espacios en blanco (\s) y es reconocido porCharacter.isWhitespace
.« Hasta que el usuario ingrese datos, la operación de escaneo puede bloquearse, esperando la entrada. « Utilice Scanner( BUFFER_SIZE = 1024 ) si desea analizar un tipo específico de token de una secuencia. « Sin embargo, un escáner no es seguro para subprocesos. Tiene que estar sincronizado externamente.
next() «Busca y devuelve el siguiente token completo de este escáner. nextInt() «Escanea el siguiente token de la entrada como un int.
Código
String name = null;
int number;
java.io.BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
name = in.readLine(); // If the user has not entered anything, assume the default value.
number = Integer.parseInt(in.readLine()); // It reads only String,and we need to parse it.
System.out.println("Name " + name + "\t number " + number);
java.util.Scanner sc = new Scanner(System.in).useDelimiter("\\s");
name = sc.next(); // It will not leave until the user enters data.
number = sc.nextInt(); // We can read specific data.
System.out.println("Name " + name + "\t number " + number);
// The Console class is not working in the IDE as expected.
java.io.Console cnsl = System.console();
if (cnsl != null) {
// Read a line from the user input. The cursor blinks after the specified input.
name = cnsl.readLine("Name: ");
System.out.println("Name entered: " + name);
}
Entradas y salidas de Stream
Reader Input: Output:
Yash 777 Line1 = Yash 777
7 Line1 = 7
Scanner Input: Output:
Yash 777 token1 = Yash
token2 = 777
Hay un problema con el método input.nextInt(): solo lee el valor int.
Entonces, al leer la siguiente línea usando input.nextLine(), recibirás "\n", es decir, la Enterclave. Entonces, para omitir esto, debe agregar input.nextLine().
Pruébalo así:
System.out.print("Insert a number: ");
int number = input.nextInt();
input.nextLine(); // This line you have to add (it consumes the \n character)
System.out.print("Text1: ");
String text1 = input.nextLine();
System.out.print("Text2: ");
String text2 = input.nextLine();
Hay varias formas de obtener información del usuario. Aquí en este programa tomaremos la clase Escáner para realizar la tarea. Esta clase de escáner se incluye en java.util
, por lo tanto, la primera línea del programa es import java.util.Scanner; que permite al usuario leer valores de varios tipos en Java. La línea de la declaración de importación debería estar en la primera línea del programa Java, y continuamos con el código.
in.nextInt(); // It just reads the numbers
in.nextLine(); // It get the String which user enters
Para acceder a los métodos de la clase Scanner, cree un nuevo objeto de escáner como "en". Ahora usamos uno de sus métodos, que es "siguiente". El método "siguiente" obtiene la cadena de texto que un usuario ingresa en el teclado.
Aquí lo estoy usando in.nextLine();
para obtener la cadena que ingresa el usuario.
import java.util.Scanner;
class GetInputFromUser {
public static void main(String args[]) {
int a;
float b;
String s;
Scanner in = new Scanner(System.in);
System.out.println("Enter a string");
s = in.nextLine();
System.out.println("You entered string " + s);
System.out.println("Enter an integer");
a = in.nextInt();
System.out.println("You entered integer " + a);
System.out.println("Enter a float");
b = in.nextFloat();
System.out.println("You entered float " + b);
}
}