2013-05-17 107 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")); 

它將很好地工作。