2013-03-07 29 views
6

可以以某種方式告訴array.contains()方法不使查找大小寫敏感嗎?數組包含()而不區分大小寫查找?

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

data.contains("three"); 
+1

我猜你的意思是'List.contains()' – m0skit0 2013-03-07 11:16:52

+1

轉換一切插入'data'和仰視之前之前爲小寫? – NPE 2013-03-07 11:17:24

+0

http://stackoverflow.com/questions/8751455/arraylist-contains-case-sensitivity – 2013-03-07 11:18:02

回答

17

contains只是檢查一個對象是否存在於列表中。所以你不能在這裏做一個不區分大小寫的查找,因爲「three」與「three」是不同的對象。

一個簡單的方法來解決,這將是

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

然後

containsCaseInsensitive("three", data); 

的Java版本8+:

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

@membersound - 您如何在這種情況下使用equalsIgnoreCase? – 2015-11-09 23:04:07

0

它會要求你寫你自己的方法。 自定義指針:

  1. 遍歷列表中的所有元素。
  2. 比較參數字符串中的所有值
  3. 進行比較不區分大小寫一定要將任何toLowerCase或toUpperCase的兩個參數和當前元素。

    List list; 公共布爾包含(字符串str){

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

不是一個有效的答案。您將'str'轉換爲小寫N次(對於'list'的每個元素都是一次),並且您每次調用此方法時都將'list'的每個項目轉換爲小寫。如果您要編寫自己的方法,只需使用'equalsIgnoreCase'並跳過所有的分配。 – 2016-01-04 19:26:27

相關問題