Вопрос-ответ

Take a char input from the Scanner

Получить ввод символов от сканера

Я пытаюсь найти способ принимать char ввод с клавиатуры.

Я пробовал использовать:

Scanner reader = new Scanner(System.in);
char c = reader.nextChar();

Этого метода не существует.

Я пробовал принимать c как String. Тем не менее, это не всегда будет работать в каждом случае, поскольку другой метод, который я вызываю из своего метода, требует char в качестве входных данных. Поэтому я должен найти способ явно использовать char в качестве входных данных.

Есть какая-нибудь помощь?

Переведено автоматически
Ответ 1

Вы могли бы взять первый символ из Scanner.next:

char c = reader.next().charAt(0);

Чтобы использовать ровно один символ, вы могли бы использовать:

char c = reader.findInLine(".").charAt(0);

Чтобы использовать строго один символ, вы могли бы использовать:

char c = reader.next(".").charAt(0);
Ответ 2

Настройка сканера:

reader.useDelimiter("");

После этого reader.next() вернет односимвольную строку.

Ответ 3

Не существует метода API для получения символа от сканера. Вы должны получить строку с помощью метода scanner.next() и вызвать String.charAt(0) возвращаемую строку.

Scanner reader = new Scanner(System.in);
char c = reader.next().charAt(0);

Просто на всякий случай с пробелами вы также могли бы сначала вызвать trim() для строки, чтобы удалить все пробелы.

Scanner reader = new Scanner(System.in);
char c = reader.next().trim().charAt(0);
Ответ 4

Есть три способа решить эту проблему:


  • Вызовите next() на сканере и извлеките первый символ строки (например, charAt(0)) Если вы хотите прочитать остальную часть строки как символы, выполните итерацию по оставшимся символам в строке. В других ответах есть этот код.


  • Используйте setDelimiter(""), чтобы установить разделитель в пустую строку. Это приведет к next() маркированию в строки длиной ровно в один символ. Таким образом, вы можете повторно вызывать next().charAt(0) для повторения символов. Затем вы можете установить разделитель в исходное значение и возобновить сканирование обычным способом!


  • Используйте Reader API вместо Scanner API. Метод Reader.read() обеспечивает считывание одного символа из входного потока. Например:


    Reader reader = new InputStreamReader(System.in);
    int ch = reader.read();
    if (ch != -1) { // check for EOF
    // we have a character ...
    }


При чтении из консоли через System.in ввод обычно буферизуется операционной системой и "передается" приложению только тогда, когда пользователь вводит ввод. Итак, если вы хотите, чтобы ваше приложение реагировало на отдельные нажатия клавиатуры, это не сработает. Вам нужно будет выполнить некоторые действия в машинном коде для конкретной ОС, чтобы отключить или обойти буферизацию строк для консоли на уровне ОС.

Ссылка:

java