как поймать пустой ввод с классом сканера в Java - PullRequest
4 голосов
/ 15 ноября 2009

Я использую класс сканера для захвата пользовательского ввода из командной строки (только строки), в качестве альтернативы моему предыдущему вопросу .

Кажется, что следующее работает нормально, за исключением того, что пустые строки не перехватываются, как это должно быть по второму условию. Например, когда я нажимаю ввод, это должно быть записано в виде пустой строки, а второе условие должно быть истинным. Однако новая пустая строка отображается на консоли каждый раз, когда вся консоль «прокручивается» вверх, если я продолжаю нажимать ввод, а не логику в условном выражении.

Есть ли правильный способ перехватить пустой ввод из командной строки с помощью сканера? (кто-то нажимает, просто введите или несколько раз нажмите пробел, а затем введите)

Спасибо за любой совет

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();
        }
    }

Ответы [ 2 ]

1 голос
/ 15 ноября 2009

Scanner является реализацией файлового ввода-вывода "для чайников". Это позволяет авторам учебников и учебников писать демо-код, не жалуясь на его сложности.

Если вы действительно хотите знать, что вы читаете, вы должны сказать что-то вроде

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

... и тогда вы можете сделать

String line = br.readLine()

и не вижу ничего, кроме правды.

0 голосов
/ 15 ноября 2009

select = br.next ();

... блокирует, пока не найдет подходящий токен. Это означает, что он будет ждать, пока не увидит возвращаемый токен, поэтому вы не получите от него пустой строки.

Попробуйте заменить эти строки:

//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...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...