2017-03-09 8 views
0

Ich habe das folgende Problem: Ich habe eine Zeichenfolge, die ich von einer MySQL-Datenbank (mit dem JDBC-Treiber) gelesen und muss es mit einem anderen String, den ich über TCP mit einem BufferedReader erhalten. Wenn ich String.equals verwende, wird false zurückgegeben, selbst wenn die Zeichenfolgen genau gleich sind. Ich habe sogar beide Zeichenfolgen an die Konsole gedruckt, um sicherzustellen, dass es keine Tippfehler oder Nullobjekte gibt. String.compareTo gibt eine negative Zahl um -100 zurück.Java zwei gleiche Strings sind nicht gleich

Ich bin hier wirklich verwirrt und habe keine konkrete Idee, wie das zu beheben ist. Vielleicht hängt es mit der Codierung der Datenbank (UTF-8) zusammen?

Wie gewünscht, hier ist mein Code-Schnipsel:

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; 
} 

Und die Konsolenausgabe ist:

*TDM1* -84 *TDM1* 

Vielen Dank im Voraus! Kapitän

+3

Was ist die Zeichenfolge Werte ?? Bitte fügen Sie die Code-Snippets hinzu –

+1

Was sind die zwei String-Werte? – Bathsheba

+2

Den numerischen Zeichenwert jedes Zeichens in beiden Strings ausgeben. Du wirst bemerken, dass sie dem ungeschulten Auge nur * scheinen *! – Kayaman

Antwort

0

So neu gestartet ich das gesamte System und erneut versucht. Alles funktioniert jetzt wie erwartet. Ich kann das mir nicht erklären, weil ich die JVM mehrfach neu gestartet habe und nichts passiert ist, und ein Systemneustart sollte ein Java-Programm nicht so beeinflussen.

Es tut mir leid für die Zeit, die ich verschwendet habe, aber ich schätze Ihre schnelle Hilfe sowieso sehr.

BEARBEITEN: Ich verwende jetzt die trim Methode von String. Diese Methode schneidet alle führenden Nullzeichen ab, um Probleme wie diese zu vermeiden. Ich hoffe, dass dies hilfreich für jemanden sein wird, der das gleiche Problem hat!

+0

Höchstwahrscheinlich etwas mit dir Datenbank oder JDBC-Treiber (da ich ein Nullzeichen von dort vermute). Danke für die Rückmeldung. –

-1

Sie diesen Code versuchen:

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(); 
    } 
} 
Verwandte Themen