2013-05-17 10 views
7

Rozważmy:Ignoruj ​​przypadek dla „zawiera” na sznurku w Javie

public static void main(String[] args) { 

    String s = "AbcD"; 

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

wyjściowa:

false 
true 

muszę wynik, aby być prawdziwe w obu przypadkach niezależnie od przypadku. Czy to możliwe?

+0

Zobacz http://stackoverflow.com/questions/14018478/string-contains-ignore-case – devnull

Odpowiedz

25

trzeba konwertować obie struny do tej samej sprawy przed użyciem contains

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

To niekoniecznie musi działać, ponieważ konwersja przypadku jest zależna od ustawień narodowych. '" i ".toLowerCase(). zawiera (" I ".toLowerCase())' może np. return false. – jarnbjo

+0

@jarnbjo Przetestowałem to w mojej lokalizacji (na Bliskim Wschodzie), w USA i po angielsku, ale to nieprawda. co masz na myśli? – David

+3

@David Dowolne ustawienia regionalne z odmiennymi regułami górnymi/małymi literami nie będą działały zgodnie z oczekiwaniami. W przypadku języka tureckiego, '" I ".toLowerCase();' będzie np. return '" ı "' a nie '" i "'. – jarnbjo

19

Można użyć org.apache.commons.lang3.StringUtils.containsIgnoreCase(String, String)

StringUtils.containsIgnoreCase(s, "ABCD") powraca prawdziwych

dokumentacji Apache here

+1

Myślę, że to najlepsza odpowiedź spośród wszystkich. O wiele wygodniejsze. @ PSR, myślę, że powinieneś oznaczyć to jako odpowiedź, jeśli to naprawdę pomaga. –

3

Używanie „toLowerCase "pomaga:

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

(oczywiście można też użyć toUpperCase zamiast)

4

Można użyć Pattern dopasowywania zrobić bez uwzględniania wielkości liter mecz:

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

Nieefektywne użycie RegEx do tego :) –

+0

@phloc Problem użycia 'toLowerCase()' jest taki, że wynik zależy od bieżących ustawień narodowych. – zakinster

+0

Właśnie dlatego zasugerowałem Lowercase (Locale.US) - lub dowolne wybrane ustawienie regionalne. –

2

Można to zrobić z toLowerCase. Coś takiego:

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

Wypróbuj następujące. powróci 0 jeśli ciąg dopasowane ...

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

to będzie działać dobrze.

Powiązane problemy