簡體   English   中英

Java查看arraylist是否包含字符串

[英]Java see if arraylist contains string

我有一個叫做Paragens的類,如下所示:

public class Paragens {
    static int contadorParagens = 1;

    String nomeParagem;
    int id;

    public Paragens(String nomeParagem) {
        this.nomeParagem = nomeParagem;
        this.id = contadorParagens++;
    }

    // getters and setters for nomeParagem
}

每個Paragens對象都有一個名稱和一個ID。

此類有一個主要方法,我在其中創建幾個Paragens對象並將其存儲在ArrayList中,如下所示:

public static void main(String[] args) {
    ArrayList<Paragens> paragens = new ArrayList<Paragens>();
    paragens.add(new Paragens("name1");
    // ... add more paragens
}

一切正常。 如果我插入一堆paragens並打印它們,我可以看到tat沒問題。

我想做的是讓用戶輸入一個paragem名稱,然后我想查看該paragem是否已在ArrayList中。

String name;
System.out.println("Insert paragem name: ");
pickName = sc.nextLine();
System.out.println(paragens.contains(pickName));

我究竟做錯了什么?

contains檢查以查看列表是否包含您實際提交的內容。 在這種情況下,您要傳遞一個String名稱,但是Paragem其與Paragem實例進行比較。 contains不能神奇地猜測它應該查看Paragem實例上的給定屬性來比較字符串。

您可以輕松地循環列表以自己找到:

boolean found = false;
for (Paragem p : paragems) {
    if (p.nomeParagem.equals(pickName)) { // Or use an accessor function for `nomeParagem` if appropriate
        found = true;
        break;
    }
}

...或作為功能:

boolean containsParagemWithName(ArrayList<Paragem> paragems, String pickName) {
    for (Paragem p : paragems) {
        if (p.nomeParagem.equals(pickName)) {
            return true;
        }
    }
    return false;
}

好吧,您需要自己實現contains方法。 在整個數組上進行for循環,並檢查元素之一的名稱是否與您要添加的元素相等。 如果沒有,請添加new Paragens(pickName)

默認情況下,將根據對象的存儲位置對它們進行比較。 因此,如果您有兩個同名的Paragem,它們仍然不相等。

因此,您可以檢查每個名稱:

boolean checkDuplicate(String pickName) {
    for (Paragem p : paragems) {
      if (p.nomeParagem.equals(pickName)) return true;
    }
    return false;
}

或實現(覆蓋) equals方法以比較名稱(不過您應該在新的Paragem對象上調用contains ,而不是String )。

暫無
暫無

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

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