簡體   English   中英

檢查ArrayList是否包含某個字符串,同時不區分大小寫

[英]Checking if an ArrayList contains a certain String while being case insensitive

如何在不區分大小寫的情況下使用.contains方法搜索ArrayList? 我嘗試過.containsIgnoreCase,但發現IgnoreCase方法僅適用於字符串。

這是我正在嘗試創建的方法:

 private ArrayList<String> Ord = new ArrayList<String>(); 

 public void leggTilOrd(String ord){
     if (!Ord.contains(ord)){
         Ord.add(ord);
     }
 }

您需要遍歷列表並檢查每個元素。 這就是contains方法中發生的事情。 由於您要對正在檢查的String元素使用equalsIgnoreCase方法而不是equals方法,因此您需要顯式執行此操作。 這可以是for-each循環或使用Stream(下面的示例是使用Stream)。

private final List<String> list = new ArrayList<>();

public void addIfNotPresent(String str) {
    if (list.stream().noneMatch(s -> s.equalsIgnoreCase(str))) {
        list.add(str);
    }
}

如果您使用的是Java7,只需覆蓋contains()方法,

public class CastInsensitiveList extends ArrayList<String> {
    @Override
    public boolean contains(Object obj) {
        String object = (String)obj;
        for (String string : this) {
            if (object.equalsIgnoreCase(string)) {
              return true;
            }
        }
        return false;
    }
}

如果您使用的是Java 8.0,請使用流API,

List<String> arrayList = new ArrayList<>();
arrayList.stream().anyMatch(string::equalsIgnoreCase);

List#Ccontains()方法檢查列表中是否存在參數,但列表元素中未進行任何更改

改用流

public void leggTilOrd(String ordParameter) {
    final List<String> ord = Arrays.asList(new String[]{ "a", "A", "b" });
    final boolean ordExists = ord.stream().anyMatch(t -> t.equalsIgnoreCase(ordParameter));
    System.out.println(ordExists);
}

如果要避免重復,請使用HashSet而不是List。 哈希在搜索時工作得更快。 在底層類中,使用String.toUpperCase()覆蓋equals和hashcode方法以返回預期結果。 如果您有一個String列表,則可以創建一個字符串包裝類。

String Wrapper可能如下所示: -

public class CaseInsensitiveString {

    String string;

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((string == null) ? 0 : string.toUpperCase().hashCode());
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        CaseInsensitiveString other = (CaseInsensitiveString) obj;
        if (string == null) {
            if (other.string != null)
                return false;
        } else if (!string.toUpperCase().equals(other.string.toUpperCase()))
            return false;
        return true;
    }

    // Other Methods to access string
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM