字符串包含 - 忽略大小写

2022-08-31 06:37:35

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


答案 1

您可以使用

org.apache.commons.lang3.StringUtils.containsIgnoreCase(CharSequence str,
                                     CharSequence searchStr);

检查字符序列是否包含搜索字符序列而不考虑大小写,处理 null。不区分大小写由 String.equalsIgnoreCase(String) 定义。

空字符序列将返回 false。

这个将比正则表达式更好,因为正则表达式在性能方面总是昂贵的。

有关官方文档,请参阅:StringUtils.containsIgnoreCase

更新:

如果你是那些

  • 不想使用Apache共享资源库
  • 不想使用昂贵的解决方案,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

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

"ABCDEFGHIJKLMNOP".toLowerCase().contains("gHi".toLowerCase())