Java查看arraylist是否包含字符串

时间:2011-11-27 10:32:31

标签: java arraylist

我有一个名为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。

这个类有一个main方法,我创建几个Paragens对象并将它们存储在ArrayList中,如下所示:

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

这工作正常。如果我插入一堆paragens并打印出来,我可以看到它是好的。

我想要做的是要求用户输入一个paragem名称,然后我想看看该paragem是否已经在ArrayList中。

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

我做错了什么?

3 个答案:

答案 0 :(得分:10)

contains检查列表是否包含您提交的实际内容。在这种情况下,您传递String名称,但将其与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;
}

答案 1 :(得分:1)

嗯,您需要自己实施contains方法。对整个数组执行for循环,并检查其中一个元素的名称是否与您尝试添加的元素相同。如果没有,请添加new Paragens(pickName)

答案 2 :(得分:1)

默认情况下,对象按内存位置进行比较。因此,如果您有两个同名的Paragem,它们仍然不相等。

或者,你要检查每个人的名字:

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

或实现(覆盖)equals方法来比较名称(您应该在新的Paragem对象上调用contains,而不是String