Pregunta

Estoy utilizando la clase escáner para capturar la entrada del usuario desde la línea de comandos (sólo cadenas), como una alternativa a mi anterior pregunta .

El siguiente parece funcionar bien, a excepción de las líneas en blanco no son capturados como deberían por el segundo condicional. Por ejemplo cuando se presiona entrar, esto debe ser capturado como una línea en blanco y la segunda condicional debe ser verdad. Sin embargo, una nueva línea en blanco aparece en la consola cada vez que, con toda la consola "desplazamiento" hacia arriba si sigo golpeando introducir, en lugar de la lógica en el condicional.

¿Hay una manera correcta de coger una entrada en blanco desde la línea de comandos utilizando el escáner? (Alguien bateando apenas entrar, o el espacio golpear un par de veces y luego ENTER)

Gracias por cualquier consejo

Machine aMachine = new Machine();
String select;
Scanner br = new Scanner(System.in); 
 while(aMachine.stillInUse()){
  select = br.next();
        if (Pattern.matches("[rqRQ1-6]", select.trim())) {
        aMachine.getCommand(select.trim().toUpperCase()).execute(aMachine);
        }
        /*
         * Ignore blank input lines and simply
         * redisplay current status -- Scanner doesn't catch this
         */
        else if(select.trim().isEmpty()){
        aMachine.getStatus();

        /*
         * Everything else is treated
         * as an invalid command
         */
    else {                
            System.out.println(aMachine.badCommand()+select);
            aMachine.getStatus();
        }
    }
¿Fue útil?

Solución

Scanner es una aplicación "para tontos" del archivo de E / S para la entrada. Permite tutoriales y libros de texto escritores a escribir código de demostración sin quejarse de las complicaciones de la misma.

Si realmente quiere saber lo que está leyendo, usted tiene que decir algo como

BufferedReader br = new BufferedReader(new FileReader("myfile.txt"))

... y entonces usted puede hacer

String line = br.readLine()

y no ver nada más que la verdad.

Otros consejos

seleccione = br.next ();

... bloques hasta que encuentre una señal adecuada. Esto significa que se va a esperar hasta que ve una ficha para volver, por lo tanto, no obtendrá una línea en blanco detrás de él.

Trate de sustituir estas líneas:

//select = br.next();    // old version with Scanner

BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
try {
  select = bufferedReader.readLine();
} catch (IOException e) {
  throw new RuntimeException(e);
}
System.out.println(">" + select + "<"); // should be able to see empty lines now...
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top