【问题标题】:Two Java strings are saying they are equal when they are not [closed]两个 Java 字符串在不 [关闭] 时表示它们是相等的
【发布时间】:2011-11-23 07:56:45
【问题描述】:

我有两个数组列表,一个包含字符串,另一个包含具有字符串数据成员的类。目标是递归遍历第二个arraylist中的对象,并找到哪个对象的字符串数据成员等于第一个arraylist中的字符串值。

现在我知道你不能使用 == 运算符来比较字符串,所以我最初使用 equals 方法,现在我尝试了 contentEquals 方法,但是无论我选择哪种方法,字符串总是被归类为相等- 即使他们不是。因此,每当我运行下面的代码时,“if”语句在第一次调用时总是返回 true,而不管字符串是否实际上相等。

Iterator stringListIter = stringList.iterator();
Iterator objectListIter = objectList.iterator();
while (stringListIter.hasNext())
{
    String currentString = (String) stringListIter.next();
    while (objectListIter.hasNext())
    {
        MyObject currentObject = (MyObject) objectListIter.next();
        String objectString = currentObject.getString();
        if (objectString.contentEquals(currentString));
        {
            //Do something here.....
            break;
        }
    }
}

任何帮助将不胜感激。我感觉它可能是相当简单的东西,但我就是看不到它。

【问题讨论】:

  • 如果您能显示StringListObjectList 的内容会很有帮助。你能举一个两个字符串的例子吗?
  • MyObject 的任何描述,特别是 MyObject.contentEquals ??
  • 我不知道类contentEquals 的方法String。你有自己的String 课程吗?
  • @Kennet:contentEquals 在 java.lang.String 类上。它需要一个 CharSequenceStringBuffer 参数。
  • @Cameron Skinner 感谢您提供信息,从未使用过...

标签: java string arraylist


【解决方案1】:

问题是你有一个多余的分号:

if (objectString.contentEquals(currentString));

这个语句基本上什么都不做,所以后面的块总是被执行。

【讨论】:

  • 好吧,现在我觉得自己像个彻头彻尾的白痴。我一定看过代码 100 次,但从未见过。非常非常感谢!!!
  • 没问题。这类问题总是很难发现 :) 顺便说一下,Checkstyle 和 Findbugs 等工具真的擅长发现这种错误。我强烈推荐他们。
  • @Ryanvandenbergh 你不会感觉那么糟糕,大约 50 人不得不在有人注意到之前查看这个问题
  • 谢谢大家 :-)。我一定要去试试卡梅伦的那些工具!
【解决方案2】:

尝试使用

stringOne.equals(stringTwo)

stringOne.equalsIgnoreCase(stringTwo)

用于比较字符串。

【讨论】:

  • 谢谢,我试过了,但他们仍然说他们不是平等的。
【解决方案3】:

如果每个对象只包含一个正在访问的字符串,那么我只需在对象中创建一个 toString() 方法并使用 .Equals() 方法。

例如:

if (ObjectString.Equals(CurrentString));
    {
        //Do something here.....
        break;
    }

在您的对象中创建一个 toString() 方法,如下所示:

public string toString()
{
    return yourStringHere;
}

试试看。

【讨论】:

  • 感谢这个好主意,不幸的是我试过了,但它仍然表明它们是平等的。
【解决方案4】:

尝试使用 objectString.equalsIgnoreCase(currentString) 而不是 objectString.contentEquals(currentString) 并且在此代码中由于 if 语句后的分号它会给出错误,否则它将正常运行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-26
    • 2015-09-25
    • 1970-01-01
    • 2013-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多