字符串包含-忽略大小写

是否可以确定字符串 str1="ABCDEFGHIJKLMNOP"是否包含字符串模式 strptrn="gHi"?我想知道在字符不区分大小写的情况下这是否可能。如果是这样,怎么做?

387235 次浏览

可以使用带有 CASE _ INSENSITIVE 标志的 java.util.regex. Pattern 进行不区分大小写的匹配:

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

如果不使用 regex:

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

你可以用

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

检查是否包含搜索字符串 不区分大小写定义为 EqualsIgnoreCase (String).

空 CharSequence 将返回 false。

就性能而言,这个版本将优于作为 正则表达式总是很昂贵的正则表达式。

有关正式文件,请参阅: 包含 IgnoreCase

更新:

如果你是那些

  • 不想使用 Apache 通用库
  • 不想使用昂贵的基于 regex/Pattern的解决方案,
  • 不想使用 toLowerCase创建额外的字符串对象,

您可以使用 String.regionMatches实现自己的定制 containsIgnoreCase

public boolean regionMatches(boolean ignoreCase,
int toffset,
String other,
int ooffset,
int len)

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


}

优化过的伊姆兰 · 塔里克版本

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

Quote (strptrn)总是返回“ Q”+ s + “ E”,即使没有可引用的内容,连接也会影响性能。