为什么我的琴弦不相同?

时间:2016-10-11 08:46:04

标签: java string if-statement

我有两个名为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

我改变了值,但总是不等于。

3 个答案:

答案 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(),考虑大小写差异。