[英]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.