как перехватить пустой ввод с помощью класса сканера в Java

StackOverflow https://stackoverflow.com/questions/1737816

Вопрос

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

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

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

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

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();
        }
    }
Это было полезно?

Решение

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

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

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

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

String line = br.readLine()

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

Другие советы

выберите = 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...
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top