Я пытаюсь найти способ char
вводить данные с клавиатуры.
Я пробовал использовать:
Scanner reader = new Scanner(System.in);
char c = reader.nextChar();
Такого метода не существует.
Пробовал брать c
в качестве String
. Тем не менее, это не всегда сработает в каждом случае, поскольку другой метод, который я вызываю из своего метода, требует char
в качестве входных данных. Поэтому мне нужно найти способ явно использовать char в качестве входных данных.
Любая помощь?
java
input
char
java.util.scanner
Ральф
источник
источник
char c = reader.next("[a-zA-Z]").charAt(0);
Настроить сканер:
После этого
reader.next()
вернется односимвольная строка.источник
Не существует метода API для получения символа из сканера. Вы должны получить String using
scanner.next()
и вызватьString.charAt(0)
метод для возвращаемой String.Чтобы быть в безопасности с пробелами, вы также можете сначала вызвать
trim()
строку, чтобы удалить любые пробелы.источник
reader.next()
выдаст вам строку, начинающуюся с первого не белого символа?Есть три пути решения этой проблемы:
Вызовите
next()
сканер и извлеките первый символ строки (напримерcharAt(0)
). Если вы хотите прочитать остальную часть строки как символы, перебирайте оставшиеся символы в строке. В других ответах есть этот код.Используйте,
setDelimiter("")
чтобы установить в качестве разделителя пустую строку. Это приведетnext()
к преобразованию в строки длиной ровно один символ. Итак, вы можете многократно вызыватьnext().charAt(0)
для итерации символов. Затем вы можете установить для разделителя исходное значение и продолжить сканирование в обычном режиме!Используйте Reader API вместо Scanner API.
Reader.read()
Метод обеспечивает один символ чтения из входного потока. Например:Когда вы читаете с консоли через
System.in
, ввод обычно буферизуется операционной системой и "передается" приложению только тогда, когда пользователь нажимает ENTER. Поэтому, если вы хотите, чтобы ваше приложение реагировало на отдельные нажатия клавиатуры, это не сработает. Вам нужно будет выполнить некоторые специфические для ОС особенности машинного кода, чтобы отключить или обойти буферизацию строк для консоли на уровне ОС.Ссылка:
источник
Вы можете решить эту проблему "захватом ввода с клавиатуры по одному символу за раз" очень просто. Без необходимости использовать Scanner all, а также без очистки входного буфера в качестве побочного эффекта, используя this.
Если все, что вам нужно, - это та же функциональность, что и функция getChar () языка C, тогда это будет отлично работать. Большим преимуществом "System.in.read ()" является то, что буфер не очищается после каждого захвата символа. Так что, если вам все еще нужен ввод всех пользователей, вы все равно можете получить остальную часть из буфера ввода.
"char c = scanner.next().charAt(0);"
Способ делает захватить полукокс , но очистит буфер.Надеюсь, это поможет, и удачи! PS Извините, я знаю, что это старый пост, но я надеюсь, что мой ответ принесет новое понимание и может помочь другим людям, у которых также есть эта проблема.
источник
На самом деле это не работает:
В этом вопросе есть несколько хороших объяснений и ссылок: Почему у класса Scanner нет метода nextChar? «Сканер разбивает свой ввод на токены, используя шаблон разделителя», что довольно открыто. Например, при использовании этого
для этой строки ввода "(1 + 9) / (3 - 1) + 6 - 2" вызов следующей возвращается "(1", c будет установлен в '(', и вы потеряете ' 1 'при следующем вызове next ()
Обычно, когда вы хотите получить символ, вы игнорируете пробелы. Это сработало для меня:
Ссылка: регулярное выражение для соответствия одному символу, который не является пробелом
источник
"[^\\s]" === "\\S"
Лучший способ ввести символ в классе Scanner:
источник
источник
Попробуйте следующее: char c = S.nextLine (). CharAt (0);
источник
Для более быстрых результатов следует использовать настраиваемое средство чтения ввода вместо извлечения первого символа из строки чтения. Ссылка для Custom ScanReader и объяснение: https://gist.github.com/nik1010/5a90fa43399c539bb817069a14c3c5a8
Код для сканирования Char:
источник
Есть два подхода, вы можете взять ровно один символ или строго один символ. Когда вы используете точно, считыватель возьмет только первый символ, независимо от того, сколько символов вы введете.
Например:
Когда вы вводите набор символов, скажем «abcd», читатель будет рассматривать только первый символ, то есть букву «а».
Но если вы используете строго, ввод должен состоять только из одного символа. Если введено более одного символа, то читатель не примет ввод
Предположим, вы вводите «abcd», ввод не выполняется, а переменная c будет иметь значение Null.
источник
Чтобы получить только один символ char c = reader.next ("."). CharAt (0);
источник
источник
Вы должны получить String с помощью scanner.next () и вызвать метод String.charAt (0) для возвращаемой String.
Пример:
вывод
источник
вам просто нужно написать это для получения значения в виде типа char.
источник
источник
Попробуй это
источник
Между прочим, вы не можете напрямую использовать char в качестве входных данных. Как вы можете видеть выше, сначала берется String, а затем charAt (0); найден и хранится
источник
Просто используйте ...
Это получает первый символ следующего ввода.
источник
Вы можете использовать приведение типов:
Таким образом, вы будете вводить данные в String из-за функции 'next ()', но затем они будут преобразованы в символ из-за 'char', указанного в скобках.
Этот метод преобразования типа данных путем упоминания целевого типа данных в скобках называется присвоением типа. У меня работает, надеюсь, у вас работает :)
источник
String
к achar
.Чтобы найти индекс символа в данном улове, вы можете использовать этот код:
источник
Самый простой способ - сначала изменить переменную на String и принять ввод как строку. Затем вы можете управлять на основе входной переменной с помощью оператора if-else или switch следующим образом.
источник