字符串包含 - 忽略大小写[重复]

问题

这个问题在这里已有答案:

  • 如何在Java中以不区分大小写的方式检查String是否包含另一个String? 17个答案

是否可以确定Stringstr1="ABCDEFGHIJKLMNOP"是否包含字符串模式strptrn="gHi"?我想知道当字符不区分大小写时是否可能。如果是这样,怎么样?


#1 热门回答(218 赞)

如果你不使用正则表达式:

"ABCDEFGHIJKLMNOP".toLowerCase().contains("gHi".toLowerCase())

#2 热门回答(202 赞)

你可以使用

org.apache.commons.lang3.StringUtils.containsIgnoreCase(CharSequence str,
                                     CharSequence searchStr);

检查CharSequence是否包含搜索CharSequence而不考虑大小写,处理null。不区分大小写由String.equalsIgnoreCase(String)定义。 null CharSequence将返回false。

这个将比正则表达更好as正则表达式始终是昂贵的在性能方面。

有关官方文档,请参阅:StringUtils.containsIgnoreCase
更新:
如果你是那些人之一

  • 不想使用Apache commons库
  • 不想使用昂贵的正则表达式/基于模式的解决方案,
  • 不想使用toLowerCase创建额外的字符串对象,

你可以实现自己的customcontainsIgnoreCaseusingjava.lang.String.regionMatches

public boolean regionMatches(boolean ignoreCase,
                             int toffset,
                             String other,
                             int ooffset,
                             int len)

ignoreCase:如果为true,则在比较字符时忽略大小写。

public static boolean containsIgnoreCase(String str, String searchStr)     {
    if(str == null || searchStr == null) return false;

    final int length = searchStr.length();
    if (length == 0)
        return true;

    for (int i = str.length() - length; i >= 0; i--) {
        if (str.regionMatches(true, i, searchStr, 0, length))
            return true;
    }
    return false;
}

#3 热门回答(22 赞)

你可以将java.util.regex.Pattern与CASE_INSENSITIVE标志一起用于不区分大小写的匹配:

Pattern.compile(Pattern.quote(strptrn), Pattern.CASE_INSENSITIVE).matcher(str1).find();