比较java中的List元素
Posted
技术标签:
【中文标题】比较java中的List元素【英文标题】:Comparing List elements in java 【发布时间】:2013-03-21 18:42:48 【问题描述】:我有 2 个列表标记和和弦。他们人口充足。但是当我尝试比较 2 时,尽管在循环中单独打印时打印相同的字符串内容,它们总是会产生错误值。有什么想法/解决方法吗?
System.out.println(token.get(i).toString().equals(chords.get(j).toString()));
两者都声明为List并初始化为ArrayList();
两者都包含字符串对象。
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++;
给出以下输出:
我也试过了
System.out.println(token.get(i).toString().equals(chords.get(j).toString()));
它总是产生一个错误,返回与屏幕截图所示相同的结果
【问题讨论】:
请显示两个相同的字符串(不要忘记任何前导/尾随空格等)。 还修剪()你的字符串... 如果两者都是字符串,那么toString()
调用两者的意义何在。
小心你的实际 if 检查token.get(i).toString() == chords.get(j).toString()
,这将比较实际的对象引用而不是值。
我建议打印字符串的长度,看看某处是否没有隐藏空间。
【参考方案1】:
到目前为止,您所做的一切都是正确的:
if (token.get(i).toString() == chords.get(j).toString()
你需要使用equals
方法,而不是==
【讨论】:
【参考方案2】:不能说为什么它打印错误,但这绝对是错误的:
if (token.get(i).toString() == chords.get(j).toString()
将该行更改为
if (token.get(i).trim().equals(chords.get(j).trim())
平等 (equals()) 与身份 (==) 不同。
【讨论】:
试过了。结果没有变化。 很好。检查你的分词器,或者任何给你输入的东西。【参考方案3】:这将比较引用而不是值。
token.get(i).toString() == chords.get(j).toString()
你必须这样做:
token.get(i).toString().equals(chords.get(j).toString())
【讨论】:
【参考方案4】:我不确定您当前的代码到底有什么问题,但我帮您简化了一点...
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);
如果我理解正确,那么您应该按照您当前的代码试图实现的目标进行操作,并且它应该可以正常工作。
【讨论】:
【参考方案5】:toString() 将默认打印对象的哈希码。这个哈希码对于所有对象都是唯一的,因此它永远不会与其他对象的哈希码匹配,并且比较它们时结果为假(即使对象相似)。您需要重写 toString() 方法以获得预期的结果。也许您可以从 toString 方法返回实例变量的值
【讨论】:
OP 表示列表包含字符串对象。toString()
的 String
对象将返回该对象的值。 equals
将使用字符串的值比较字符串,因此这段代码应该可以正常工作。
String
对象的 toString()
不返回哈希码。见docs.oracle.com/javase/1.5.0/docs/api/java/lang/…
是的,这是正确的,因为 String 类覆盖了默认的 toString() 实现,但通常大多数类不会,因此它们返回哈希码
但这不适用于这里。以上是关于比较java中的List元素的主要内容,如果未能解决你的问题,请参考以下文章