我有两个名为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
。
我改变了值,但总是不等于。
答案 0 :(得分:1)
Database.str1是" x4"和str2是" x4"
它可能看起来像,但我敢打赌,事实并非如此。为什么不打印每个字符串的char数组,这样你可以识别出不同的字符串?我建议寻找前导/尾随空格,非打印字符,与Unicode相关的差异等。
答案 1 :(得分: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
做同样的事。
答案 2 :(得分: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()
,考虑大小写差异。