比较java中的List元素

时间:2013-03-21 18:42:48

标签: java

我有2个LIST标记和和弦。他们人口充足。但是当我尝试比较2时,尽​​管在循环中单独打印时打印相同的字符串内容,但它们总是会产生错误值。任何想法/解决方法?

System.out.println(token.get(i).toString().equals(chords.get(j).toString()));

两者都声明为List并初始化为ArrayList();

两者都包含String对象。

while (i < tokenLength) {
    System.out.println("");
    int j = 0;
    while (j < numberOfChords) {
        System.out.println(token.get(i).toString() + " compares "
                + chords.get(j).toString());
        System.out.println(token.get(i).toString()
                .equals(chords.get(j).toString()));
        if (token.get(i).toString() == chords.get(j).toString()
                && token.get(i).toString().length() <= maxLengthOfChord) {

            foundChord.add(token.get(i));
        }
        j++;
    }
    i++;
}

给出以下输出: enter image description here

我也试过这个

System.out.println(token.get(i).toString().equals(chords.get(j).toString()));

它总是产生一个错误,返回与屏幕截图

中显示的相同的结果

5 个答案:

答案 0 :(得分:2)

到目前为止,你做的一切都是正确的:

if (token.get(i).toString() == chords.get(j).toString()

您需要使用equals方法,而不是==

答案 1 :(得分:1)

不能说为什么它打印错误,但这是明确错误的:

    if (token.get(i).toString() == chords.get(j).toString()

将该行更改为

    if (token.get(i).trim().equals(chords.get(j).trim())

Equality(equals())与identity(==)不同。

答案 2 :(得分:1)

这将比较引用而不是值。

token.get(i).toString() == chords.get(j).toString()

你必须这样做:

token.get(i).toString().equals(chords.get(j).toString())

答案 3 :(得分:1)

我不确定你目前的代码究竟是什么问题,但我帮你简化了一下......

for (String t : token) {
  for (String c : chords) {
    System.out.println(t + " compares " + c);
    System.out.println(t.equals(c));
    if (t.equals(c)) {
      foundChord.add(t);
    }
  }
}

如果我正确理解它,你应该做你当前代码试图实现的目标,它应该没有错误。

答案 4 :(得分:0)

默认情况下,

toString()将打印对象的哈希码。对于所有对象,此哈希码是唯一的,因此它永远不会与其他对象的哈希码匹配比较它们时结果为false(即使对象相似)。您需要覆盖toString()方法以获得预期的结果。可能是你可以从toString方法返回实例变量的值