string包含 – 忽略大小写
是否有可能确定一个stringstr1="ABCDEFGHIJKLMNOP"
包含一个string模式strptrn="gHi"
? 我想知道,如果字符是不区分大小写的,这是可能的。 如果是这样,怎么样?
您可以使用
org.apache.commons.lang3.StringUtils.containsIgnoreCase(CharSequence str, CharSequence searchStr);
检查CharSequence是否包含searchCharSequence而不考虑大小写,处理null。 不区分大小写由String.equalsIgnoreCase(String)定义。
一个空CharSequence将返回false。
这一个将比正则expression式更好,因为正则expression式在性能上总是很昂贵 。
对于官方文档,请参阅: StringUtils.containsIgnoreCase
更新:
如果你是谁的人
- 不想使用Apache公共库
- 不想用昂贵的
regex/Pattern
基于regex/Pattern
的解决scheme, - 不想通过使用
toLowerCase
来创build额外的string对象,
你可以使用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; }
如果你不会用正则expression式去:
"ABCDEFGHIJKLMNOP".toLowerCase().contains("gHi".toLowerCase())
您可以使用java.util.regex.Pattern和CASE_INSENSITIVE标志进行不区分大小写的匹配:
Pattern.compile(Pattern.quote(strptrn), Pattern.CASE_INSENSITIVE).matcher(str1).find();
尝试这个
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”,连接会破坏性能。