是否可以确定字符串 str1="ABCDEFGHIJKLMNOP"是否包含字符串模式 strptrn="gHi"?我想知道在字符不区分大小写的情况下这是否可能。如果是这样,怎么做?
str1="ABCDEFGHIJKLMNOP"
strptrn="gHi"
可以使用带有 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。
检查是否包含搜索字符串 不区分大小写定义为 EqualsIgnoreCase (String).
空 CharSequence 将返回 false。
就性能而言,这个版本将优于作为 正则表达式总是很昂贵的正则表达式。
有关正式文件,请参阅: 包含 IgnoreCase
更新:
如果你是那些
regex/Pattern
toLowerCase
您可以使用 String.regionMatches实现自己的定制 containsIgnoreCase
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”,即使没有可引用的内容,连接也会影响性能。