一尘不染

字符串包含-忽略大小写

java

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


阅读 238

收藏
2020-09-08

共1个答案

一尘不染

您可以使用

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

检查CharSequence是否包含搜索CharSequence(不区分大小写),处理为null。不区分大小写由String.equalsIgnoreCase(String)定义。

空的CharSequence将返回false。

这将比regex更好,因为 regex 在性能方面 总是很昂贵 的。

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

更新:

如果你是那些

  • 不想使用Apache Commons库
  • 不想使用昂贵的regex/Pattern基础解决方案,
  • 不想使用来创建其他字符串对象toLowerCase

您可以containsIgnoreCase使用java.lang.String.regionMatches实现自己的自定义

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;
}
2020-09-08