我有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
。
我更改了值,但始終不等於。
我有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
。
我更改了值,但始終不等於。
嘗試將其更改爲:
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
這樣做。
Database.str1是 「×4」 和str2是 「X4」
它可能看起來像這一點,但我敢打賭,情況並非如此。爲什麼不打印出每個字符串的char數組,這樣你就可以識別出什麼不同?我建議找前/後間隔,非打印字符,Unicode相關的差異等
它可能是由於尾部空格造成的,如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()
,考慮到情況的差異。
我不確定那是OP要求的。他問他們爲什麼不平等,而不是他應該怎麼做才能通過聲明。但如果我錯了,那麼你的說法是正確的。 –
如果差異不在字符串的末尾怎麼辦?例如'Ab'和'A \ 0b'在我的控制檯中看起來相同,但'\ 0'不會被刪除。 –
@AndyTurner在這種情況下,這些字符串是不是「不平等」? – progyammer
尾隨空格也許? –
嘗試打印'System.out.println(「>」+ str1 +「!=」+ str2 +「<」);'看得更好。 – Berger
@Berger'System.out.println(Arrays.toString(str1.toCharArray())+「!=」+ Arrays.toString(str2.toCharArray()));'會幫助你看到更好。 –