我有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()));'会帮助你看到更好。 –