Buscar..


Lectura de entrada de usuario desde la consola.

Utilizando BufferedReader :

System.out.println("Please type your name and press Enter.");

BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
try {
    String name = reader.readLine();
    System.out.println("Hello, " + name + "!");
} catch(IOException e) {
    System.out.println("An error occurred: " + e.getMessage());
}

Las siguientes importaciones son necesarias para este código:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

Utilizando Scanner :

Java SE 5
System.out.println("Please type your name and press Enter");

Scanner scanner = new Scanner(System.in);
String name = scanner.nextLine();

System.out.println("Hello, " + name + "!");

La siguiente importación es necesaria para este ejemplo:

import java.util.Scanner;

Para leer más de una línea, invoque scanner.nextLine() repetidamente:

System.out.println("Please enter your first and your last name, on separate lines.");
    
Scanner scanner = new Scanner(System.in);
String firstName = scanner.nextLine();
String lastName = scanner.nextLine();
    
System.out.println("Hello, " + firstName + " " + lastName + "!");

Hay dos métodos para obtener Strings , next() y nextLine() . next() devuelve el texto hasta el primer espacio (también conocido como "token"), y nextLine() devuelve todo el texto que el usuario ingresó hasta presionar intro.

Scanner también proporciona métodos de utilidad para leer tipos de datos que no sean String . Éstos incluyen:

scanner.nextByte();
scanner.nextShort();
scanner.nextInt();
scanner.nextLong();
scanner.nextFloat();
scanner.nextDouble();
scanner.nextBigInteger();
scanner.nextBigDecimal();

El prefijo de cualquiera de estos métodos con has (como en hasNextLine() , hasNextInt() ) devuelve true si el flujo tiene más del tipo de solicitud. Nota: estos métodos bloquearán el programa si la entrada no es del tipo solicitado (por ejemplo, al escribir "a" para nextInt() ). Puede usar un try {} catch() {} para evitar esto (ver: Excepciones )

Scanner scanner = new Scanner(System.in); //Create the scanner
scanner.useLocale(Locale.US); //Set number format excepted
System.out.println("Please input a float, decimal separator is .");
if (scanner.hasNextFloat()){ //Check if it is a float
    float fValue = scanner.nextFloat(); //retrive the value directly as float
    System.out.println(fValue + " is a float");
}else{
    String sValue = scanner.next(); //We can not retrive as float
    System.out.println(sValue + " is not a float");
}

Utilizando System.console :

Java SE 6
String name = System.console().readLine("Please type your name and press Enter%n");

System.out.printf("Hello, %s!", name);

//To read passwords (without echoing as in unix terminal)
char[] password = System.console().readPassword();

Ventajas :

  • Los métodos de lectura están sincronizados.
  • Se puede usar la sintaxis de cadena de formato

Nota : Esto solo funcionará si el programa se ejecuta desde una línea de comando real sin redirigir las secuencias de entrada y salida estándar. No funciona cuando el programa se ejecuta desde ciertos IDE, como Eclipse. Para el código que funciona dentro de los IDE y con la redirección de flujos, vea los otros ejemplos.

Implementar el comportamiento básico de la línea de comandos

Para los prototipos básicos o el comportamiento básico de la línea de comandos, el siguiente bucle es útil.

public class ExampleCli {

    private static final String CLI_LINE   = "example-cli>"; //console like string

    private static final String CMD_QUIT   = "quit";    //string for exiting the program
    private static final String CMD_HELLO  = "hello";    //string for printing "Hello World!" on the screen
    private static final String CMD_ANSWER = "answer";    //string for printing 42 on the screen

    public static void main(String[] args) {
        ExampleCli claimCli = new ExampleCli();    // creates an object of this class

        try {
            claimCli.start();    //calls the start function to do the work like console
        }
        catch (IOException e) {
            e.printStackTrace();    //prints the exception log if it is failed to do get the user input or something like that
        }
    }

    private void start() throws IOException {
        String cmd = "";
        
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        while (!cmd.equals(CMD_QUIT)) {    // terminates console if user input is "quit"
            System.out.print(CLI_LINE);    //prints the console-like string 

            cmd = reader.readLine();    //takes input from user. user input should be started with "hello",  "answer" or "quit"
            String[] cmdArr = cmd.split(" ");

            if (cmdArr[0].equals(CMD_HELLO)) {    //executes when user input starts with "hello"
                hello(cmdArr);
            }
            else if (cmdArr[0].equals(CMD_ANSWER)) {    //executes when user input starts with "answer"
                answer(cmdArr);
            }
        }
    }
    
    // prints "Hello World!" on the screen if user input starts with "hello"
    private void hello(String[] cmdArr) {
        System.out.println("Hello World!");
    }
    
    // prints "42" on the screen if user input starts with "answer"
    private void answer(String[] cmdArr) {
        System.out.println("42");
    }
}

Alineación de cuerdas en consola.

El método PrintWriter.format (llamado a través de System.out.format ) se puede utilizar para imprimir cadenas alineadas en la consola. El método recibe una String con la información de formato y una serie de objetos para formatear:

String rowsStrings[] = new String[] {"1", 
                                     "1234", 
                                     "1234567", 
                                     "123456789"};

String column1Format = "%-3s";    // min 3 characters, left aligned
String column2Format = "%-5.8s";  // min 5 and max 8 characters, left aligned
String column3Format = "%6.6s";   // fixed size 6 characters, right aligned
String formatInfo = column1Format + " " + column2Format + " " + column3Format;

for(int i = 0; i < rowsStrings.length; i++) {
    System.out.format(formatInfo, rowsStrings[i], rowsStrings[i], rowsStrings[i]);
    System.out.println();
}

Salida:

1   1          1
1234 1234    1234
1234567 1234567 123456
123456789 12345678 123456

El uso de cadenas de formato con permisos de tamaño fijo para imprimir las cadenas en una apariencia similar a una tabla con columnas de tamaño fijo:

String rowsStrings[] = new String[] {"1", 
                                     "1234", 
                                     "1234567", 
                                     "123456789"};

String column1Format = "%-3.3s";  // fixed size 3 characters, left aligned
String column2Format = "%-8.8s";  // fixed size 8 characters, left aligned
String column3Format = "%6.6s";   // fixed size 6 characters, right aligned
String formatInfo = column1Format + " " + column2Format + " " + column3Format;

for(int i = 0; i < rowsStrings.length; i++) {
    System.out.format(formatInfo, rowsStrings[i], rowsStrings[i], rowsStrings[i]);
    System.out.println();
}

Salida:

1   1             1
123 1234       1234
123 1234567  123456
123 12345678 123456

Ejemplos de cadenas de formato

  • %s : solo una cadena sin formato
  • %5s : formatee la cadena con un mínimo de 5 caracteres; si la cadena es más corta, se rellenará con 5 caracteres y se alineará a la derecha
  • %-5s : formatee la cadena con un mínimo de 5 caracteres; si la cadena es más corta, se rellenará con 5 caracteres y se alineará a la izquierda
  • %5.10s : formatee la cadena con un mínimo de 5 caracteres y un máximo de 10 caracteres; si la cadena es más corta que 5, se rellenará con 5 caracteres y se alineará a la derecha ; si la cadena es más larga que 10, se truncará a 10 caracteres y se alineará a la derecha
  • %-5.5s : formatee la cadena con un tamaño fijo de 5 caracteres (el mínimo y el máximo son iguales); si la cadena es más corta que 5, se rellenará con 5 caracteres y se alineará a la izquierda ; si la cadena es más larga que 5, se truncará a 5 caracteres y se alineará a la izquierda


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow