2016-04-27 3 views
-1

Мое главное меню находится внутри цикла while, который проверяет, хочет ли пользователь выйти.Можно ли сделать hasNext() нечувствительным к регистру?

while(!sc.hasNext("quit")){ 
    ...} 

Могу ли я сделать hasNext() чувствительны к регистру, поэтому пользователь может ввести любое изменение в случаях слово «бросить», как бросить курить или бросить курить?

+2

Да. [Прочитать Javadocs] (https://docs.oracle.com/javase/8/docs/api/java/util/Scanner.html). 'Scanner.hasNext (String)' является шаблоном. Вы также можете использовать 'Scanner.hasNext (Pattern)' при необходимости. – KevinO

ответ

1

Я считаю, что строковый шаблон «^ (? I) quit $», переданный в sc.hasNext(String), будет работать.

final String QUIT_PAT = "^(?i)quit$"; 
... 
while (! sc.hasNext(QUIT_PAT)) { 
    ... 
} 

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

Однако я бы предложил read this answer, который предлагает внедрить чек при использовании stdin, возможно, не лучший подход.


Пример Результаты испытаний регулярное выражение: enter image description here

0

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

String str1 = new String(); 
str1 = scanner.nextLine(); 
str1.toUpperCase(); 
while(str1.equals("QUIT")){....} 
+0

Ум, №. Вы не можете выполнить 'str1 ==" QUIT "'. Сравнение строк не выполняется на Java. – KevinO

+0

Я знаю, что вам нужно использовать .equals(), мою ошибку. –