Pergunta

Estou usando a classe Scanner para capturar a entrada do usuário da linha de comando (somente strings), como uma alternativa ao meu anterior pergunta.

A seguir, parece funcionar bem, exceto que as linhas em branco não são capturadas como deveriam pelo segundo condicional. Por exemplo, quando eu pressiono Enter, isso deve ser capturado como uma linha em branco e o segundo condicional deve ser verdadeiro. No entanto, uma nova linha em branco é exibida no console toda vez, com todo o console "rolando" para cima se eu continuar acertando Enter, em vez da lógica na condicional.

Existe uma maneira adequada de capturar uma entrada em branco da linha de comando usando o scanner? (alguém batendo basta entrar ou acertar o espaço algumas vezes e depois entrar)

Obrigado por qualquer conselho

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();
        }
    }
Foi útil?

Solução

Scanner é uma implementação "para manequins" da E/S do arquivo para entrada. Ele permite que os escritores de tutorial e livros didáticos escrevam código de demonstração sem gemer sobre as complicações dele.

Se você realmente quer saber o que está lendo, você deve dizer algo como

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

... e então você pode fazer

String line = br.readLine()

e não veja nada além da verdade.

Outras dicas

select = Br.Next ();

... bloqueia até encontrar um token adequado. Isso significa que ele esperará até que veja um token para retornar; portanto, você não receberá uma linha em branco de volta.

Tente substituir estas linhas:

//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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top