2016-10-11 63 views
-4

我有2個名稱爲str1的字符串,由url和str2中的數據填充,數據來自SQLite Database.str1是「x4」,str2是「x4」,但是當我想比較它們時,它們不等於。爲什麼我的字符串不相等?

if(str1.equals(str2)) System.out.println(str1 + "=" + str2); 
else System.out.println(str1 + "!=" + str2); 

並且總是打印x4!=x4

我更改了值,但始終不等於。

+1

尾隨空格也許? –

+0

嘗試打印'System.out.println(「>」+ str1 +「!=」+ str2 +「<」);'看得更好。 – Berger

+0

@Berger'System.out.println(Arrays.toString(str1.toCharArray())+「!=」+ Arrays.toString(str2.toCharArray()));'會幫助你看到更好。 –

回答

1

嘗試將其更改爲:

StringBuilder string = new StringBuilder(); 
string.append("'"); 
string.append(str1); 
string.append("'"); 

if(!str1.equals(str2)){ 
    string.append("!"); 
} 

string.append("'"); 
string.append(str2); 
string.append("'"); 
System.out.println(string.toString()); 

這是最有可能有一個空格,回車或選項卡中的一個字符串。 通過在每個字符串的開頭和結尾添加一個字符,可以確定是否是這種情況。

如果問題依然存在,那可能意味着其中一個不同的字符不可打印。在這種情況下,嘗試:的

string.append(str1.toCharArray()); 

代替

string.append(str1); 

而對於str2這樣做。

1

Database.str1是 「×4」 和str2是 「X4」

它可能看起來這一點,但我敢打賭,情況並非如此。爲什麼不打印出每個字符串的char數組,這樣你就可以識別出什麼不同?我建議找前/後間隔,非打印字符,Unicode相關的差異等

0

它可能是由於尾部空格造成的,如a_horse_with_no_name所述,或者(可能您沒有注意到)。試試這個:

if(str1.trim().equalsIgnoreCase(str2.trim())) 
    System.out.print(str1 + "=" + str2); 
else 
    System.out.print(str1 + "!=" + str2); 

使用trim()刪除尾隨空格和使用equalsIgnoreCase()代替equals(),考慮到情況的差異。

+0

我不確定那是OP要求的。他問他們爲什麼不平等,而不是他應該怎麼做才能通過聲明。但如果我錯了,那麼你的說法是正確的。 –

+0

如果差異不在字符串的末尾怎麼辦?例如'Ab'和'A \ 0b'在我的控制檯中看起來相同,但'\ 0'不會被刪除。 –

+0

@AndyTurner在這種情況下,這些字符串是不是「不平等」? – progyammer

相關問題