我有两个String
,str1
和str2
。如何检查str2
中是否包含str1
,忽略大小写?
答案 0 :(得分:994)
str1.toLowerCase().contains(str2.toLowerCase())
答案 1 :(得分:122)
matches()
怎么样?
String string = "Madam, I am Adam";
// Starts with
boolean b = string.startsWith("Mad"); // true
// Ends with
b = string.endsWith("dam"); // true
// Anywhere
b = string.indexOf("I am") >= 0; // true
// To ignore case, regular expressions must be used
// Starts with
b = string.matches("(?i)mad.*");
// Ends with
b = string.matches("(?i).*adam");
// Anywhere
b = string.matches("(?i).*i am.*");
答案 2 :(得分:30)
如果您能够使用 org.apache.commons.lang.StringUtils ,我建议使用以下内容:
String container = "aBcDeFg";
String content = "dE";
boolean containerContainsContent = StringUtils.containsIgnoreCase(container, content);
答案 3 :(得分:20)
您可以使用toLowerCase()
方法:
public boolean contains( String haystack, String needle ) {
haystack = haystack == null ? "" : haystack;
needle = needle == null ? "" : needle;
// Works, but is not the best.
//return haystack.toLowerCase().indexOf( needle.toLowerCase() ) > -1
return haystack.toLowerCase().contains( needle.toLowerCase() )
}
然后使用:
调用它if( contains( str1, str2 ) ) {
System.out.println( "Found " + str2 + " within " + str1 + "." );
}
请注意,通过创建自己的方法,您可以重复使用它。然后,当有人指出您应该使用contains
而不是indexOf
时,您只需更改一行代码。
答案 4 :(得分:10)
我也赞成RegEx解决方案。代码会更清晰。在我知道字符串变得很大的情况下,我会毫不犹豫地使用toLowerCase(),因为字符串是不可变的并且必须被复制。此外,matches()解决方案可能会令人困惑,因为它将正则表达式作为参数(搜索“Need $ le”冷却有问题)。
基于上述一些例子:
public boolean containsIgnoreCase( String haystack, String needle ) {
if(needle.equals(""))
return true;
if(haystack == null || needle == null || haystack .equals(""))
return false;
Pattern p = Pattern.compile(needle,Pattern.CASE_INSENSITIVE+Pattern.LITERAL);
Matcher m = p.matcher(haystack);
return m.find();
}
example call:
String needle = "Need$le";
String haystack = "This is a haystack that might have a need$le in it.";
if( containsIgnoreCase( haystack, needle) ) {
System.out.println( "Found " + needle + " within " + haystack + "." );
}
(注意:根据您的需要,您可能希望以不同的方式处理NULL和空字符串。我认为我的方式更接近字符串的Java规范。)
速度关键解决方案可以包括通过角色迭代查找针的第一个字符。当第一个字符匹配时(不区分大小写),开始逐个字符地迭代针,在大海捞针中查找相应的字符,如果所有字符都匹配则返回“true”。如果遇到不匹配的字符,则通过下一个字符的haystack继续迭代,如果位置> 1,则返回“false”。 haystack.length() - 达到了needle.length()。
答案 5 :(得分:6)
我将使用contains方法和属于String类的toUpper
方法的组合。一个例子如下:
String string1 = "AAABBBCCC";
String string2 = "DDDEEEFFF";
String searchForThis = "AABB";
System.out.println("Search1="+string1.toUpperCase().contains(searchForThis.toUpperCase()));
System.out.println("Search2="+string2.toUpperCase().contains(searchForThis.toUpperCase()));
这将返回:
搜索1 =真
搜索2 =假