字符串包含 - 忽略大小写

时间:2012-12-24 07:33:12

标签: java string contains case-insensitive

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

5 个答案:

答案 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

更新:

如果你是那些

的人
  • 不想使用Apache commons库
  • 不想使用昂贵的基于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”,即使没有什么可引用的,连接也会破坏性能。