2012-10-16 34 views
1

我在雙鏈表中使用compareTo()來比較代碼和讀取字符串,並找不出爲什麼它不工作。這涉及到很多代碼,但我不想讓你們讀完所有內容,所以我會盡量發佈相關內容並希望它足夠。compareTo()== 0不工作

這是一行代碼。我知道這是不完整的,但其他一切正常。

if(p.getCode().compareTo(str)==0){ 

他們是平等的。在比較發生之前,我將它們打印出來並且它們是相同的。

我知道得到的東西並不多,我有點要求你相信我,他們真的是平等的,但這是爲了節省你的時間。我想知道是否有某種特殊規則我應該知道關於compareTo()我缺少...

謝謝。

+0

在繼續進行之前,我會打印p.getCode()。compareTo(str)的結果,以確保它返回0或不是。 – kosa

+0

嘗試使用'p.getCode()。equals(str)' –

+5

如果您寫了對象,請告訴我們兩個對象的類型和內容以及compareTo()方法的實現。 – EJP

回答

3

compareToComparable接口提供。當Object.equals返回true時,沒有強制要求Comparable.compareTo返回0。也就是說,對象的兩個實例可能完全相同,並且Comparator.compareTo的實現不必返回0

假設p.getCode返回String和參數strString,則String實施並確保equalscompareTo是一致的。

所以有其他的可能性:在一個或兩個參數

  1. 您的前導或尾隨空格。如果您要添加調試日誌記錄的路線,我經常發現在每個字符串周圍使用管道('|')字符以確保空格可見是有幫助的。
  2. 大小寫字符與小寫字符存在差異。字符串比較區分大小寫,並且必須使用特殊的不區分大小寫的Comparator
+0

確實如此,但String中的文檔保證了這一點。 –

+2

是的,但問題中沒有提到p.getCode()是一個字符串。 –

+0

也許我沒有讀這個權利,但第一句話是「我在一個雙向鏈表中使用compareTo()來比較一個代碼和一個讀取字符串」。當然,這可能是代碼不是字符串,但可能嗎?如果它不是一個字符串,那麼這可能是問題。 –

1

爲了檢驗相等性,最好使用equals()而不是compareTo()。可能與字符串有所不同,也可能是尾部空格,或者某些不匹配的大小寫字符。要格外謹慎,也許是東西沿着這些路線將幫助(假設兩個字符串不爲null):

if (p.getCode().trim().equalsIgnoreCase(str.trim())) { 

現在,如果p.getCode()不是Stringstr是不是一個String(你如果知道這編譯器會抱怨對象不存在方法trim())......在那裏,您發現問題 - 在測試相等性之前,您必須確保兩個對象的類型相同。

+4

'x.equals(y)'和'x.compareTo(y)== 0'是等價的,其中'x'和'y'是字符串。這是一個很好的評論('equals'是首選方法),但不是答案。 – 2012-10-16 21:44:59

+2

@pst是的,但是當更多的信息可用時,它可能會*擴展成答案。這個答案只是一個佔位符。 –

+0

@pst那裏,答案擴展。 –

0

它們是否都使用相同的編碼?在嘗試比較ASCII和Unicode字符串之前,我遇到了問題,特別是在解析文本文件時。

0

按照documentationString.compareTo()String.equals()是一致的,當涉及到平等

結果是零,如果兩個字符串相等;當equals(Object)方法返回true時,compareTo返回0。

如果要查看兩個字符串上的差異使用toCharArray()並將每個字符作爲整數打印出來。