使用.contains方法忽略大小写的选项?

tra*_*ama 40 java list arraylist

有没有选择忽略.contains()方法的情况?

我有一个ArrayListDVD对象.每个DVD对象都有一些元素,其中一个是标题.我有一个搜索特定标题的方法.它有效,但我希望它不区分大小写.

小智 68

如果您使用的是Java 8

List<String> list = new ArrayList<>();

boolean containsSearchStr = list.stream().anyMatch("search_value"::equalsIgnoreCase);
Run Code Online (Sandbox Code Playgroud)


小智 27

我猜你的意思是在搜索字符串时忽略大小写?

我不知道,但您可以尝试将字符串转换为搜索到较低或大写,然后搜索.

// s is the String to search into, and seq the sequence you are searching for.
bool doesContain = s.toLowerCase().contains(seq);
Run Code Online (Sandbox Code Playgroud)

编辑:正如Ryan Schipper建议的那样,你也可以(也可能会更好)做seq.toLowerCase(),具体取决于你的情况.

  • 可能也想要`seq.toLowerCase()`;) (4认同)
  • 这个答案是错误的。有关为什么不能简单地调用`toLowerCase()`进行不区分大小写的比较的说明,请参见http://mattryall.net/blog/2009/02/the-infamous-turkish-locale-bug。 (2认同)
  • (大拇指向下)OP 要求的是集合的 #contains,而不是序列。 (2认同)

小智 12

private boolean containsIgnoreCase(List<String> list, String soughtFor) {
    for (String current : list) {
        if (current.equalsIgnoreCase(soughtFor)) {
            return true;
        }
    }
    return false;
}
Run Code Online (Sandbox Code Playgroud)

  • 这类似于使用ArrayLists执行相同操作的答案http://stackoverflow.com/a/8751546/1815624 (2认同)

Har*_*and 7

您可以使用 Stream() 替换 equalsIgnoreCase 的 contains() ,如下所示

    List<String> names = List.of("One","tWo", "ThrEe", "foUR", "five", "Six", "THREE");
    boolean contains = names.stream().anyMatch(i -> i.equalsIgnoreCase("three"))
Run Code Online (Sandbox Code Playgroud)

  • 不必要地浪费时间和内存。我们可以使用“anyMatch()”函数来代替。当找到第一个匹配时,将不会进一步评估流 (2认同)

小智 6

在 Java 8 中,您可以使用 Stream 接口:

return dvdList.stream().anyMatch(d -> d.getTitle().equalsIgnoreCase("SomeTitle"));
Run Code Online (Sandbox Code Playgroud)


DDs*_*six 6

我知道我来晚了一点,但在 Kotlin 中你可以轻松使用:

fun Collection<String>.containsIgnoreCase(item: String) = any {
    it.equals(item, ignoreCase = true)
}


val list = listOf("Banana")

println(list.contains("banana"))
println(list.containsIgnoreCase("BaNaNa"))
Run Code Online (Sandbox Code Playgroud)