2017-03-09 127 views
0

我有以下问题:我有一个字符串,我从MySQL数据库(使用JDBC驱动程序)读取,并且必须将它与通过TCP接收的另一个字符串(BufferedReader)进行比较。当我使用String.equals时,即使字符串完全相等,也会返回false,我甚至会将两个字符串都打印到控制台,以确保没有任何拼写错误或null对象。 String.compareTo返回-100左右的负数。Java两个相等的字符串不相等

我真的很困惑,并没有具体的想法如何解决这个问题。也许它与数据库的编码(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* 

谢谢! 队长

+3

什么是字符串值请添加代码片段 –

+1

什么是两个字符串值? – Bathsheba

+2

打印出两个字符串中每个字符的数字字符值。你会注意到他们仅仅*看起来就像未经训练的眼睛! – Kayaman

回答

0

所以我重新启动整个系统,并且重试。现在一切正常,如预期。我无法向自己解释这一点,因为我多次重新启动JVM并没有发生任何事情,并且系统重新启动不应该影响这样的Java程序。

我很抱歉,我浪费了每个人的时间,但我真的很感激你的快速帮助。

编辑:我现在使用Stringtrim方法。此方法切断任何前导空字符以防止像这样的问题。我希望这对有同样问题的人有帮助!

+0

最有可能是你的数据库或JDBC驱动程序(因为我怀疑从那里的空字符)。 Thx用于回报。 –

-1

你可以试试这个代码:

Socket socket=new Socket(ipAddress, port);//socket obj 
ipStream = socket.getInputStream(); 
StringBuffer sbf = new StringBuffer(); 

while(ipStream.read()!=-1){ 
    sbf.append((char) data); 
    if(yourDatabaseString.equals(sbf.toString())){ //compare database string with Tcp data 
     sbf=new StringBuffer(); 
    } 
}