Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 字符串包含-忽略大小写_Java_String_Contains_Case Insensitive - Fatal编程技术网

Java 字符串包含-忽略大小写

Java 字符串包含-忽略大小写,java,string,contains,case-insensitive,Java,String,Contains,Case Insensitive,是否可以确定字符串是否包含字符串模式?我想知道当字符不区分大小写时,这是否可能。如果是,如何使用?您可以将java.util.regex.Pattern与不区分大小写的标志一起用于不区分大小写的匹配: Pattern.compile(Pattern.quote(strptrn), Pattern.CASE_INSENSITIVE).matcher(str1).find(); 如果您不使用正则表达式: "ABCDEFGHIJKLMNOP".toLowerCase().contains("gHi"

是否可以确定字符串是否包含字符串模式?我想知道当字符不区分大小写时,这是否可能。如果是,如何使用?

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

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

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

"ABCDEFGHIJKLMNOP".toLowerCase().contains("gHi".toLowerCase())
你可以用

org.apache.commons.lang3.StringUtils.containsIgnoreCase(CharSequence str,
                                     CharSequence searchStr);
检查CharSequence是否包含搜索CharSequence,而不考虑 案例,处理空。不区分大小写的定义如下: equalsIgnoreCase(字符串)

空字符序列将返回false

这一个会比regex好,因为就性能而言,regex总是很昂贵

有关官方文件,请参阅:

更新:

如果你是

  • 不想使用Apache commons库
  • 不想使用昂贵的基于
    regex/Pattern
    的解决方案
  • 不想使用
    toLowerCase
    创建其他字符串对象
您可以使用

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;
}
试试这个

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());
    }

}

优化的Imran Tariq版本

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

Pattern.quote(strptrn)总是返回“\Q”+s+“\E”,即使没有什么可以引用,concatation也会破坏性能。

虽然这可能是一个答案,但我不认为这是一个解决大
字符串问题的好方法
这在广泛的unicode世界中不起作用-请参见
if(file.getName().toLowerCase().contains)(editText.getText().toString().toLowerCase())
正如建议的那样,正则表达式总是很昂贵的。它正确地使用小写。但这并不意味着此比较适用于所有区域性。请参阅。他们建议指定区域性,或显式使用大小写不敏感的比较函数,如上文所示的containsIgnoreCase。如果希望值为ch,请将true作为第三个参数传递如果您希望以不区分大小写的方式检查值,请以区分大小写的方式进行检查并传递false。谢谢。这里有很多其他好东西,例如indexOfIgnoreCase…该方法假设haystack中匹配部分的长度与指针的长度相同。因此,如果您搜索“ß”并且字符串包含“SS”,它将找不到匹配项,即使忽略大小写,这两个字符串是相同的(在德语区域设置中,当然,无论何时进行此类操作,都必须设置区域设置)org.apache.commons.lang3.StringUtils这个包在androidYou中不可用,您应该使用按位|运算符而不是加法运算符。看看前面的答案@SamStephens写道:您必须同时指定不区分大小写和UNICODE_大小写,您仍然无法获得正确的值,因为Java使用完整的大小写映射,但是只使用简单的箱子折叠。这是一个问题。”
Pattern.compile(strptrn, Pattern.CASE_INSENSITIVE + Pattern.LITERAL).matcher(str1).find();