¿Cómo puedo leer la entrada desde la consola usando la clase Scanner en Java?

Resuelto Hock3yPlayer asked hace 12 años • 17 respuestas

¿ Cómo podría leer la entrada desde la consola usando la Scannerclase? 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 Stringvariable.

Hock3yPlayer avatar Aug 09 '12 02:08 Hock3yPlayer
Aceptado

Un ejemplo sencillo para ilustrar cómo java.util.Scannerfunciona 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 usernamevariable.

Encontrará más información sobre su implementación en la documentación API parajava.util.Scanner

Rune Vikestad avatar Aug 08 '2012 19:08 Rune Vikestad
Scanner scan = new Scanner(System.in);
String myLine = scan.nextLine();
Matt_Bro avatar Aug 08 '2012 19:08 Matt_Bro

Lectura de datos desde la consola

  • BufferedReaderestá 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

  • Scannerdivide su entrada en tokens usando un patrón delimitador, que de forma predeterminada coincide con espacios en blanco (\s) y es reconocido por Character.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
Yash avatar Jul 06 '2015 08:07 Yash

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();
Vaibhav Bhalla avatar Mar 07 '2018 13:03 Vaibhav Bhalla

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);
    }
}
Jaimin Patel avatar Dec 31 '2015 17:12 Jaimin Patel