2015-08-03 4 views
2

Мне нужно проверить, соответствует ли вход пользователя чему-либо в Set или List, но в настоящее время я использую .contains(). Очевидно, что это не работает, когда пользователь вводит то, что не соответствует правильному случаю, поэтому я думал об использовании .matches (regex), но не являюсь профессиональным regexer.Java - Игнорировать регистр, проверяющий ввод пользователя

Мог ли я использовать Regex или Pattern, чтобы проверить, соответствует ли вход пользователя чему-либо в списке, в противном случае.

спасибо.

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

+2

Вы можете взять первоначальный вход и превратить его в нижний регистр, а затем сравнить его к тому, что вы хотите. – Flipybitz

+2

Вы можете просто проверить на 'input.toLowerCase(). Contains (...)' – Jack

+1

Спасибо Flipybitz и Jack. Похоже, что иногда вы слишком много учитесь, и вы забываете про простые вещи ... Ха-ха – Dom

ответ

0

Вы можете временно преобразовать обе строки в нижний регистр или оба в верхний регистр, а затем выполнить сопоставление.

for(int i=0;i<myList.length-1;i++){ 
     if(myString.toLowerCase().contains(myList.get(i).toLowerCase())){ 
      // your code if myString is contained within a String in the List 
     } 
} 

или

for(int i=0;i<myList.length-1;i++){ 
     if(myString.toUpperCase().contains(myList.get(i).toUpperCase())){ 
      // your code if myString is contained within a String in the List 
     } 
} 
+0

Зачем беспокоиться о верхнем/нижнем корпусе, когда вы можете просто использовать String.equalsIgnoreCase()? – Shar1er80

+0

String.equalsIgnoreCase() проверяет, является ли это то, что фактическая строка не больше не меньше. нам нужно, чтобы проверить, содержит ли он строку, не равную точной строке. – RoHaN

-1

Предполагая, что вы работаете со строками, вы можете Переберите в список или набор и проверить с помощью str.equalsIgnoreCase(strToCompare).

-1

Позволяет называть ваш ввод строки. Выполните следующие действия, чтобы проверить, совпадает ли это, игнорируя капитализацию.

boolean isItEqual = input.equalsIgnoreCase("I am the string you want! :D"); 
1

Вы можете попробовать Pattern.CASE_INSENSITIVE с шаблоном.

0

Если Set реализация в порядке (это означает, что вам не нужно хранить повторяющиеся слова), вы можете использовать TreeSet с регистронезависимым Comparator:

Set<String> setOfWords = new TreeSet<>(String.CASE_INSENSITIVE_ORDER); 

Таким образом, вы можете кормить пользователя ввод непосредственно в contains. Следующий тест код

setOfWords.addAll(Arrays.asList("ab", "cd", "ef")); 
System.out.println(setOfWords.contains("AB")); 
System.out.println(setOfWords.contains("cD")); 
System.out.println(setOfWords.contains("Ef")); 

печатает

 
true 
true 
true 
0

Кажется мне, как у вас есть три варианта (некоторые из них уже было сказано).

  • STRING.toLowerCase.contains();
  • STRING.equalsIgnoreCase();
  • Регулярное выражение с [A-Za-Z]
1

Я не понимаю, почему вы не можете использовать String.equalsIgnoreCase(). Regex для этого не требуется. Если вы используете List, вы можете использовать .stream().anyMatch() с этим Predicate:

c -> c.equalsIgnoreCase(data) 

Пример кода:

public static void main(String[] args) throws Exception { 
    List<String> check = new ArrayList() {{ 
     add("dog"); 
     add("CAT"); 
     add("oWl"); 
     add("GiraFFe"); 
    }}; 

    Scanner scanner = new Scanner(System.in); 
    System.out.print("Enter data: "); 
    String data = scanner.nextLine(); 

    if (check.stream().anyMatch(c -> c.equalsIgnoreCase(data))) { 
     System.out.println("Data found"); 
    } else { 
     System.out.println("Data not found"); 
    } 
} 

Результаты:

Enter data: gIRAffE 
Data found 

Enter data: lamb 
Data not found 
+0

String.equalsIgnoreCase() проверяет, является ли это полной строкой. OP содержит(), чтобы проверить, содержит ли он * строку, а не * равно *. –

Смежные вопросы