2016-10-11 108 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

相关问题