14

考虑:

public static void main(String[] args) {

    String s = "AbcD";

    System.out.println(s.contains("ABCD"));
    System.out.println(s.contains("AbcD"));
}

输出:

false
true

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

4

6 回答 6

44

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

s.toLowerCase().contains("ABCD".toLowerCase());
于 2013-05-17T08:35:33.730 回答
30

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

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

Apache 文档在这里

于 2013-05-17T08:35:50.460 回答
5

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

Pattern pattern = Pattern.compile(Pattern.quote(s), Pattern.CASE_INSENSITIVE);
pattern.matcher("ABCD").find();
pattern.matcher("AbcD").find();

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

于 2013-05-17T08:36:20.033 回答
3

使用“toLowercase”有助于:

System.out.println(s.toLowercase(Locale.US).contains("ABCD".toLowercase (Locale.US)));

(当然你也可以用 toUppercase 代替)

于 2013-05-17T08:36:04.007 回答
2

您可以使用toLowerCase. 像这样的东西:

s.toLowerCase().contains("aBcd".toLowerCase());
于 2013-05-17T08:57:15.593 回答
1

试试下面的。0如果字符串匹配,它将返回...

System.out.println(s.compareToIgnoreCase("aBcD"));

它会正常工作。

于 2013-05-17T09:05:56.720 回答