问题
这个问题在这里已有答案:
- 如何在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创建额外的字符串对象,
你可以实现自己的customcontainsIgnoreCase
usingjava.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();