Каков наилучший метод символов Java 8 для обнаружения отсутствия символов?

У меня есть простая программа, написанная на Java, и я пытаюсь найти способ проверить, было ли вообще что-либо введено до того, как пользователь нажмет «ввод» в консоли. В настоящее время я использую isLetter(), чтобы убедиться, что буква была введена, но это, похоже, не мешает кому-то ничего не вводить и нажимать ввод. Я пробовал несколько методов в документации и не могу найти работающий.

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

 if (! Character.isLetter(letter)) {  //Don't forget to validate for no chars entered!
      throw new IllegalArgumentException("A letter is required");

person Alex Wall    schedule 08.05.2015    source источник
comment
Вы не показали, как вы инициализировали letter для начала, что не помогает. При отладке этого кода, что вы заметили в качестве значения letter, когда пользователь делает просто нажимает клавишу возврата?   -  person Jon Skeet    schedule 08.05.2015
comment
Вам нужно показать больше контекста. Как вы заполняете letter?   -  person b4hand    schedule 08.05.2015
comment
Код получает символ, запрашивая readLine, а затем используя charAt(0) для получения первого введенного символа: String GuessAsString = console.readLine(Введите букву: ); догадка символа = предположениеAsString.charAt (0); догадка становится буквой через функцию проверки догадки, из которой исходный фрагмент игры.   -  person Alex Wall    schedule 08.05.2015


Ответы (2)


Поскольку вы используете вызов readLine(), а обычно вызовы readLine() не включают символы завершения строки в возвращаемое значение, почему бы вам просто не сделать:

if (!yourInput.equals("")) {/* code */}

На самом деле, вы можете указать это еще до того, как попытаетесь charAt(0)

person Aify    schedule 08.05.2015
comment
Это хороший момент, и я думаю, что обычно люди так и делают, и код можно было бы реорганизовать таким образом, но мне было любопытно, что делать с пустым символом, а не со строкой. - person Alex Wall; 08.05.2015
comment
@AlexWall Когда вы читаетеLine (), вы автоматически получаете строку — вы не можете проверить charAt(0) пустой строки (что вы получаете, когда просто нажимаете ввод) — в индексе 0 ничего нет. Если вы не говорите о том, если пользователь ввел пробел и ТОГДА нажал клавишу ввода... в этом случае вы все равно никогда не сможете обнаружить «\ r» и «\ n», поскольку readLine() не включает символы завершения строки. Если вы хотите избежать ЭТОГО сценария, просто введите trim() в свой ввод, и этот метод снова будет работать. - person Aify; 08.05.2015
comment
Спасибо за объяснение, это имеет смысл! - person Alex Wall; 08.05.2015

Нажатие Enter приведет к символу возврата каретки, поэтому вы можете просто выполнить это сравнение:

if (letter != '\r' && letter != '\n') { ... }
person Konstantin Yovkov    schedule 08.05.2015