Как получить пользовательский ввод в Java по одному символу за раз, включая пробелы? - PullRequest
0 голосов
/ 24 января 2019

Я хочу получать ввод с клавиатуры по одному символу за раз.Входные данные могут содержать пробелы, иметь любую длину и не требовать специального символа для обозначения его конца.

Проблема в том, что если я использую InputStreamReader, он не знает, когдаконец потока достигнут, потому что нет никакого ограниченного размера буфера и специального символа, чтобы сообщить ему, когда достигнут конец ввода.

Я думал, что смогу заставить его работать, когда обнаружил, что InputStreamReader.read() == -1 означает, что конец ввода достигнут.Тем не менее, добавление оператора if для проверки того, что InputStreamReader.read() == -1 не работает, поскольку он никогда не достигает этого случая.

InputStreamReader userInput = new InputStreamReader(System.in);
boolean end = false;

while(! end) {
    int c = userInput.read();
    if(c == -1) {
    end = true;
    } else {
    System.out.println(c);
    }
}

При использовании приведенного выше кода я ожидаю, что после того, как пользователь введет свои данные вконсоль, он печатает код ASCII каждого символа один за другим, а затем завершается.

Однако программа продолжает работать и получать ввод, потому что условие if никогда не выполняется.

Как я могу сообщить программе, когда достигнут конец ввода?

РЕДАКТИРОВАТЬ: я обнаружил, что требования моего назначения позволяют мне использовать символ EOF, чтобы отметить конец ввода, однако, когда я ввожу его в консоль без первого нажатия Enter, программа завершает работу, не читая ни одного из предыдущих вводов.Я использую IntelliJ в качестве своей IDE.

...