我有以下问题:我有一个从MySQL数据库(使用JDBC驱动程序)读取的字符串,并且必须将它与我通过TCP接收的另一个字符串BufferedReader
进行比较。当我使用String.equals
时,即使字符串完全相等也返回false,我甚至将两个字符串打印到控制台以确保没有任何拼写错误或空对象。 String.compareTo
会在-100左右返回一个负数。
我真的很困惑,并没有具体的想法如何解决这个问题。也许它与数据库的编码有关(UTF-8)?
根据要求,这是我的代码段:
public TeleportSign getTeleportSign(String target) {
// I used a HashMap, but I switched to an ArrayList in order to be able
// to compare the Strings directly.
//return signs.get(target);
for(TeleportSign s : signsList) {
// I am printing the Strings here. I even put stars to the left
// and the right of the String to make sure there are no
// spaces or new lines. s.getTarget() returns the String from the DB,
// target is the String sent over TCP.
System.out.println("*" + s.getTarget() + "* " +
String.valueOf(s.getTarget().compareTo(target))
+ " *" + target + "*");
if(s.getTarget().compareTo(target) == 0)
return s;
}
return null;
}
控制台输出是:
*TDM1* -84 *TDM1*
提前致谢! 队长
答案 0 :(得分:0)
所以我重新启动整个系统并重试。现在一切都按预期工作了。我无法向自己解释这一点,因为我多次重启JVM并且什么也没发生,系统重启不应该影响像这样的Java程序。
对于每个人浪费的时间,我感到很抱歉,但我非常感谢你的快速帮助。
编辑:我现在使用trim
中的String
方法。此方法会切断任何前导空字符以防止出现此类问题。我希望这对有同样问题的人有所帮助!