2011-06-16 56 views
0

我有兩個「相等」的字符串。當我打印兩個字符串時,它們在屏幕上看起來完全一樣。但是,當我比較字符串的結果是「假」,並在兩個字符串中使用.length時,第一個字符串的結果爲174,第二個字符串的結果爲171。我已經刪除了所有空格和所有設置字符串的行。問題等於Java中的字符串

String 1: 
<docxmlns="http://example.com/default"xmlns:x="http://example.com/x"><aa1="1"a2="2">123</a><bxmlns:y="http://example.com/y"a3="&quot;3&quot;"y:a1="1"y:a2="2">cdf</b></doc> 

String 2: 
<docxmlns="http://example.com/default"xmlns:x="http://example.com/x"><aa1="1"a2="2">123</a><bxmlns:y="http://example.com/y"a3="&quot;3&quot;"y:a1="1"y:a2="2">cdf</b></doc> 

String 1 length: 174 
String 2 length: 171 

我從NetBeans控制檯複製了兩個字符串,就像你看到它們是相等的,但它們有不同的長度。

謝謝。

+2

當你說比較時,這是什麼意思?你可以發佈你的比較代碼嗎?它聽起來像是修剪或字符編碼問題。 – joostschouten 2011-06-16 16:12:51

+0

if(archCan.equals(arch))...我使用這種方法進行比較,並在比較之前使用trim。我認爲這可能是一個編碼問題。 – arkhadi 2011-06-16 16:16:22

+0

if(archCan.trim()。equals(arch.trim()))做什麼? – joostschouten 2011-06-16 16:18:29

回答

3

當你在你的java程序中讀取它時,字符串中可能包含換行符(Windows中的"\n\r"),它可以改變兩個字符串的長度和相等性。

+0

謝謝。問題出在「\ r」我刪除了「\ n」和空格,但我沒有對「\ r」做任何事情。 – arkhadi 2011-06-16 16:26:14

0

我已經刪除了所有的空格和所有設置字符串在一行。

白色空間很重要,可能是您的平等問題的決定因素。作爲一個測試,看看它是否是從兩個字符串中去掉空白區域然後執行一次equals檢查。

2

在兩個字符串上調用getBytes()並打印結果。我打賭你有一個編碼差異。

0

您是否剪切了&從外部來源(例如PDF)粘貼字符串? 幾年前我有類似的問題,我發現從PDF複製的字符串有時包含一些不可見的字符(我使用Acrobat Reader)。

2

嘗試打印他們的字符:

System.out.println(Arrays.toString(yourString.toCharArray()); 

這應該讓你看到那裏的非打印字符(或任何不同)是,作爲輸出的「ABC」,將「[1, b,c]「。