忽略Java中字符串的'contains'大小写

PSR*_*PSR 10 java string

考虑:

public static void main(String[] args) {

    String s = "AbcD";

    System.out.println(s.contains("ABCD"));
    System.out.println(s.contains("AbcD"));
}
Run Code Online (Sandbox Code Playgroud)

输出:

false
true
Run Code Online (Sandbox Code Playgroud)

无论如何,我都要求结果在两种情况下都是正确的.可能吗?

san*_*hat 34

在使用之前,您需要将两个字符串转换为相同的大小写 contains

s.toLowerCase().contains("ABCD".toLowerCase());
Run Code Online (Sandbox Code Playgroud)

  • 这不一定有效,因为案例转换是特定于语言环境的.`"i".toLowerCase().contains("I".toLowerCase())`可能会返回false. (8认同)
  • @David任何具有偏离大写/小写规则的语言环境都不会按预期工作.对于土耳其语,"我".toLowerCase();`将例如返回`"ı"`而不是"i". (7认同)

dav*_*rld 23

你可以用 org.apache.commons.lang3.StringUtils.containsIgnoreCase(String, String)

StringUtils.containsIgnoreCase(s, "ABCD") 返回true

Apache文档在这里


zak*_*ter 5

并不是特别有效,但是您可以使用Pattern匹配器进行不区分大小写的匹配:

Pattern pattern = Pattern.compile(Pattern.quote(s), Pattern.CASE_INSENSITIVE);
pattern.matcher("ABCD").find();
pattern.matcher("AbcD").find();
Run Code Online (Sandbox Code Playgroud)

另请注意,它不会神奇地解决语言环境问题,但toLowercase(Locale)与结合使用Pattern.UNICODE_CASE标志时,它的处理方式将有所不同,它可能能够一次处理所有语言环境。

  • 使用RegEx效率不高:) (2认同)