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”,连接会破坏性能。