我在Java String比較中遇到小問題。奇怪的Java字符串比較
我寫了一個類,它接受一個String並將其解析爲一個自定義樹類型。我寫了一個toString類,然後再將此樹轉換回字符串。作爲我的單元測試的一部分,我只是檢查由toString方法生成的字符串是否與首先解析的字符串相同。
這裏是我的一些簡單的測試打印輸出,以便我們可以看到發生了什麼。
final String exp1 = "(a|b)";
final String exp2 = "((a|b)|c)";
final Node tree1 = Reader.parseExpression2(exp1);
final Node tree2 = Reader.parseExpression2(exp2);
final String t1 = tree1.toString();
final String t2 = tree2.toString();
System.out.println(":" + exp1 + ":" + t1 + ":");
System.out.println(":" + exp2 + ":" + t2 + ":");
System.out.println(exp1.compareToIgnoreCase(t1));
System.out.println(exp2.compareToIgnoreCase(t2));
System.out.println(exp1.equals(t1));
System.out.println(exp2.equals(t2));
具有以下輸出; (NB「:」 - 作爲視線引導,所以我可以保證世界上沒有多餘的空格)基於
:(a|b):(a|b):
:((a|b)|c):((a|b)|c):
-1
-1
false
false
手動分別比較,它們是EXP1和EXP2到T1和T2完全一樣的字符串。但由於某種原因,Java堅持認爲它們是不同的。
這不是使用==
而不是.equals()
的明顯錯誤,但我很難理解爲什麼兩個看起來相同的字符串是不同的。任何幫助將不勝感激:)
嘗試將它們與diff工具進行比較,它會告訴您哪些字符不同。或者那是你「手動比較」的意思? –
爲了提供幫助,我們需要查看解析和toString代碼。 –
@DonRoby當然,問題在於比較看似完全相同的兩個字符串,而不是它們如何生成。我會很高興地發佈代碼,因爲它可以幫助更快地找到解決方案,但目前情況有點混亂。 –