繁体   English   中英

Java string.equals(string)表现异常

[英]Java string.equals(string) not behaving as expected

我偶尔从String.equals(String)得到奇怪的结果。

这是代码:

boolean equals(OutputHolder other){
    boolean result=true;
    if( ! this.speciesEng.equals(other.speciesEng))
        result=false;
    else if( ! this.date.equals(other.date))
        result=false;
    else if( ! this.gridRef.equals(other.gridRef))
        result=false;
    else if( ! this.recorder.equals(other.recorder))
        result=false;
    return result; 
}

一切都非常简单,但是在某些对象上,.equals()在看似2个相同的字符串上返回false。

这是发生错误时“表达式”监视列表的屏幕快照。 如您所见,尽管两个字符串看起来都一样,但this.speciesEng.equals(other.speciesEng)返回的是false。

这些字符串最初来自相同的字符串资源,但都已通过XMPP连接传递并返回。

编辑:为了通过XMPP连接传递它们,它们已与其他字符串串联起来以代表整个OutputHolder。 然后在返回时使用.substring(start,end)将它们分开。 在我看来,如果我从子字符串中创建一个新字符串,可能会有所不同,但这没有任何效果。 也没有修剪它们。

我不知道如何继续调试问题。 欢迎任何帮助或建议。

确保没有尾随空格。 因此,在使用equals方法比较字符串之前,最好在字符串上使用trim方法。

那里可能有一些空格。 在调用equals之前使用String#trim方法。

我认为您应该首先trim这两个字符串,并去除多余的空格。
这样,您将能够正确地将两个Strings等同起来。

示例代码:

String yourString = "Your String   ";
//Trim the String and get rid of extra spaces before doing any comparisons.
yourString.trim();
//After trimming it, do the comparisons.
if(yourString.equalsIgnoreCase("other trimmed string"))
{
 .....
}


我希望这有帮助。

boolean equals(OutputHolder other){
boolean t1 = speciesEng.equals(other.speciesEng);
boolean t2 = date.equals(other.date);
boolean t3 = gridRef.equals(other.gridRef);
boolean t4 = recorder.equals(other.recorder);
return t1 && t2 && t3 && t4;

}

在上帝知道从调试器复制和粘贴到十六进制编辑器多少小时后,我发现了问题并找到了可行的解决方案。

正如建议的那样,问题是空格,但不是我或(我认为)其他人怀疑的方式。 由于某些原因,我无法深入了解本底,因此我的字符串中出现了不间断的空格(0x00A0),而不是普通的空格(Ox0020)。 这似乎或多或少是随机发生的,我还没有找到负责的代码部分。

目前的解决方法是使用以下方法启动equals()方法:

    speciesEng=speciesEng.replace((char)0x00a0,(char)0x0020);
    other.speciesEng=other.speciesEng.replace((char)0x00a0,(char)0x0020);
    speciesEng=speciesEng.trim();
    other.speciesEng=other.speciesEng.trim();

远非优雅,但暂时有效。 如果有人要添加更多内容,我将保留几天的时间。

感谢所有的答案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM