1

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 を返します。

これは、エラーが発生したときの Expressions ウォッチリストのスクリーンショットです。ご覧のとおり、this.speciesEng.equals(other.speciesEng) は、両方の文字列が同じように見えるにもかかわらず、false を返しています。

文字列は最初は同じ文字列リソースからのものですが、どちらも XMPP 接続を介して渡されて戻ってきています。

編集: XMPP 接続を介してそれらを渡すために、それらは他の文字列と連結されて、OutputHolder 全体を表します。それらは、返されるときに .substring(start,end) を使用して分離されます。部分文字列から新しい文字列を作成すると違いが生じるかもしれないと思いましたが、それは何の効果もありませんでした。トリミングもしませんでした。

問題のデバッグを進める方法について途方に暮れています。どんな助けや提案も歓迎します。

4

5 に答える 5

2

末尾にスペースがないことを確認してください。そのため、メソッドを使用trimして文字列を比較する前に、文字列に対してメソッドを使用することをお勧めしますequals

于 2013-09-11T09:50:46.950 に答える
2

そこにいくつかの空白があるかもしれません。String#trimequals を呼び出す前にメソッドを使用します。

于 2013-09-11T09:52:07.630 に答える
1

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"))
{
 .....
}


これが役立つことを願っています。

于 2013-09-11T09:53:13.387 に答える
0
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;

}

于 2013-09-11T09:58:45.110 に答える