2013-05-17 48 views
7

串考虑:忽略大小写的“包含”在Java

public static void main(String[] args) { 

    String s = "AbcD"; 

    System.out.println(s.contains("ABCD")); 
    System.out.println(s.contains("AbcD")); 
} 

输出:

false 
true 

我需要的结果在两种情况下是真实的不管的情况。可能吗?

+0

请参阅http://stackoverflow.com/questions/14018478/string-contains-ignore-case – devnull

回答

25

你需要使用contains

s.toLowerCase().contains("ABCD".toLowerCase()); 
+7

这不一定有效,因为大小写转换是特定于语言环境的。 '“i”.toLowerCase()。contains(“I”.toLowerCase())'可能例如返回false。 – jarnbjo

+0

@jarnbjo我在我的位置(中东),美国和英国测试它,但事实并非如此。你说什么地点? – David

+3

@大卫任何偏离大写/小写规则的语言环境都无法按预期工作。对于土耳其语,''I“.toLowerCase();'例如返回'“ı”'而不是'“我”'。 – jarnbjo

19

前两个字符串相同的情况下转换,您可以使用org.apache.commons.lang3.StringUtils.containsIgnoreCase(String, String)

StringUtils.containsIgnoreCase(s, "ABCD")返回true

Apache文档here

+1

我认为这是最好的答案。更方便。 @PSR,我想你应该把这个标记为答案,如果这真的有帮助。 –

3

使用“toLowercase “帮助:

System.out.println(s.toLowercase(Locale.US).contains("ABCD".toLowercase (Locale.US))); 

(当然你也可以使用toUppercase代替)

4

你可以使用一个Pattern匹配,使不区分大小写的匹配:

Pattern pattern = Pattern.compile(Pattern.quote(s), Pattern.CASE_INSENSITIVE); 
pattern.matcher("ABCD").find(); 
pattern.matcher("AbcD").find(); 
+2

使用正则表达式有点低效:) –

+0

@phloc使用'toLowerCase()'的问题是结果取决于当前的语言环境。 – zakinster

+0

这就是为什么我建议小写(Locale.US) - 或任何你想要的语言环境。 –

2

你可以用toLowerCase做到这一点。类似这样的:

s.toLowerCase().contains("aBcd".toLowerCase()); 
1

请尝试以下操作。它将返回0如果字符串匹配...

System.out.println(s.compareToIgnoreCase("aBcD")); 

它将很好地工作。