2013-03-07 15 views
6

Czy mogę w jakiś sposób powiedzieć metodę array.contains(), aby nie uwzględniać wielkości liter w odnośniku?Tablica zawiera() bez sprawdzania wielkości liter?

List<String> data = Arrays.asList(
    "one", Two", "tHRee"); //lots of entries (100+) 

data.contains("three"); 
+1

Chyba znaczy 'List.contains()' – m0skit0

+1

Konwersja wszystko na małe litery przed włożeniem do 'data' przed i patrząc w górę? – NPE

+0

http://stackoverflow.com/questions/8751455/arraylist-contains-case-sensitivity –

Odpowiedz

17

contains wystarczy sprawdzić, czy obiekt znajduje się na liście. Więc nie można tu wykonać wyszukiwania niewrażliwego na wielkość liter, ponieważ "trzy" to inny obiekt niż "Trzy".

proste podejście do rozwiązania tego problemu byłoby

public boolean containsCaseInsensitive(String s, List<String> l){ 
    for (String string : l){ 
     if (string.equalsIgnoreCase(s)){ 
      return true; 
     } 
    } 
    return false; 
    } 

a następnie

containsCaseInsensitive("three", data); 

Java 8+ wersja:

public boolean containsCaseInsensitive(String s, List<String> l){ 
     return l.stream().anyMatch(x -> x.equalsIgnoreCase(s)); 
    } 
+0

@membersound - w jaki sposób użyłeś equalsIgnoreCase dla tego scenariusza? –

0

będzie wymagać, aby napisać swoją własną metodę . wskaźniki dla niestandardowych :

  1. iteracyjne nad wszystkich elementów na liście.
  2. porównać ciąg parametru ze wszystkimi wartościami w
  3. dokonać porównania wielkości liter należy zastosować każdy toLowerCase lub toUpperCase na obu parametrów i bieżącego elementu.

    Lista listy; public boolean contains (String str) {

    for(int i=0;i<list.size();i++){ 
         if(list.elementAt(i).toLowerCase().Equals(str.toLowerCase())) return true; 
        } 
    return false; 
    } 
    
+1

Nie jest to skuteczna odpowiedź. Konwertujesz 'str' na małe litery N razy (jeden raz dla każdego elementu' list'), i konwertujesz każdy element 'list' na małe litery za każdym razem, gdy wywołujesz tę metodę. Jeśli masz kłopot z pisaniem własnej metody, po prostu użyj 'equalsIgnoreCase' i pomiń wszystkie alokacje. –

Powiązane problemy