Como pegar entrada em branco com a classe Scanner em java
-
20-09-2019 - |
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();
}
}
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...