是否可以确定字符串str1="ABCDEFGHIJKLMNOP"
是否包含字符串模式strptrn="gHi"
?我想知道当角色不区分大小写时是否可能。如果是这样,怎么样?
答案 0 :(得分:233)
如果你不使用正则表达式:
"ABCDEFGHIJKLMNOP".toLowerCase().contains("gHi".toLowerCase())
答案 1 :(得分:221)
您可以使用
org.apache.commons.lang3.StringUtils.containsIgnoreCase(CharSequence str,
CharSequence searchStr);
检查CharSequence是否包含搜索CharSequence而不管其是什么 case,处理null。不区分大小写的定义为 String.equalsIgnoreCase(字符串)。
null CharSequence将返回false。
这个优于正则表达式,因为正则表达式在性能方面总是很昂贵。
有关官方文档,请参阅:StringUtils.containsIgnoreCase
更新:
如果你是那些
的人regex/Pattern
的解决方案,toLowerCase
,您可以使用java.lang.String.regionMatches
实施自己的自定义containsIgnoreCase
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;
}
答案 2 :(得分:22)
您可以将java.util.regex.Pattern与CASE_INSENSITIVE标志一起用于不区分大小写的匹配:
Pattern.compile(Pattern.quote(strptrn), Pattern.CASE_INSENSITIVE).matcher(str1).find();
答案 3 :(得分:8)
试试这个
public static void main(String[] args)
{
String original = "ABCDEFGHIJKLMNOPQ";
String tobeChecked = "GHi";
System.out.println(containsString(original, tobeChecked, true));
System.out.println(containsString(original, tobeChecked, false));
}
public static boolean containsString(String original, String tobeChecked, boolean caseSensitive)
{
if (caseSensitive)
{
return original.contains(tobeChecked);
}
else
{
return original.toLowerCase().contains(tobeChecked.toLowerCase());
}
}
答案 4 :(得分:2)
优化的Imran Tariq版本
Pattern.compile(strptrn, Pattern.CASE_INSENSITIVE + Pattern.LITERAL).matcher(str1).find();
Pattern.quote(strptrn)总是返回“\ Q”+ s +“\ E”,即使没有什么可引用的,连接也会破坏性能。