我需要检查用户输入是否与Set或List中的任何内容匹配,但我目前正在使用.contains()。显然,当用户输入的内容不是正确的情况时,这不起作用,所以我考虑使用.matches(正则表达式),但不是专业的正则表达式。
我可以使用正则表达式或模式来检查用户输入是否与列表中的任何内容匹配,不管用何情况。
谢谢。
我注意到我必须使用for循环来从我的Set中获取元素,然后将它们与.matches()进行比较。
答案 0 :(得分:1)
您可以使用Pattern尝试Pattern.CASE_INSENSITIVE。
答案 1 :(得分: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
答案 2 :(得分: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
答案 3 :(得分:0)
在我看来,你有三种选择(有些已经说明了)。
答案 4 :(得分: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
}
}
答案 5 :(得分:-1)
有一个名为equalsIgnoreCase
的字符串方法可以做你想要的。
http://www.tutorialspoint.com/java/java_string_equalsignorecase.htm
答案 6 :(得分:-1)
假设您正在处理字符串,您可以遍历List或Set并使用str.equalsIgnoreCase(strToCompare)
进行检查。
答案 7 :(得分:-1)
让我们调用您的字符串输入。执行以下操作以检查其是否相同,忽略大小写。
boolean isItEqual = input.equalsIgnoreCase("I am the string you want! :D");