2016-04-08 6 views
0

Ich bin mit Java String.Equals() -Methode zwei Strings zu vergleichen. Die Strings werden aus einer Datei abgerufen, die zuerst jedes Wort einzeln durch Splitting Strings mit der String.split() -Methode gelesen und gespeichert wird.Vergleich Java Strings.equals() Methode liefert eine falsche BoolAusdruck

Aber die Methode entspricht nicht „true“ für einige String ergibt, die genau gleich ist.

Hier, ich bin Umsetzung Login-Programms, die Benutzername und Passwort ein und überprüft von der file.dat nimmt, ob der Benutzer vorhanden ist oder nicht, und falls vorhanden, ob er richtiges Passwort oder nicht bereitstellt.

Unten ist die Logik Snippet:

for(int j = 0; j < attrib.length-1; j += 2) 
{ 
if(j == 0) 
    attrib[j] = attrib[j].replace("null",""); 
if(u.equals(attrib[j])) 
{ 
    if(p.equals(attrib[j+1])) 
    { 
    System.out.println("Sucess"); 
    chk++; 
    break; 
    } 
} 
if(chk == 1) 
    break; 
} 

Punkt mich, wo ich falsch. Hier

ist die Datei-Inhalt von "file.dat":

ritwik/1234/ezio/5678 

Und hier ist die Terminal-Ausgabe: Terminal Output

+0

"die Methode entspricht nicht" wahr "für eine Zeichenfolge, die genau das gleiche ist. Ja, tut es. Haben Sie Ihren Code debuggen? Haben Sie alle Werte überprüft, die verglichen werden? Auch:" Test "und" Test "sind nicht die gleichen, so wird dies nicht zu einem wahren führen, zum Beispiel – Stultuske

+0

Könnten Sie bitte die Definition von" u "und" attrib "einschließen? –

+0

" equals ergibt nicht "true" für einige Zeichenfolge, die genau gleich ist . "Dann sind sie nicht genau gleich. Versuchen Sie, das Ergebnis von' String.toCharArray() 'für jede der zwei Zeichenfolgen zu betrachten - sie können nicht druckbare Zeichen enthalten, oder vielleicht Codepunkte, die * gleich aussehen (oder Ähnliche), sind aber nicht. –

Antwort

1

Wenn u ist ein String und attrib ein String Array, wird es den korrekten booleschen Wert zurückgeben.

Überprüfen Sie, ob beide Strings identisch sind. Übliche Fehler:

1. String.equals unterscheidet zwischen Groß- und Kleinschreibung. Also "Hallo" und "Hallo" sind nicht gleich.

2. String.equals wird nicht abgeschnitten (Leerzeichen entfernen). Also "Hallo" und "Hallo" sind nicht gleich.

Wenn dies beides nur ist es verwenden scheitern,

System.out.println ("." + u + "==" + attrib[i] + "."); 

vor dem Vergleich, so dass Sie sehen können, wenn sie beide genau das gleiche, vielleicht etwas falsch, wenn Sie initialisieren. (Die Punkte sollen das Erkennen von Leerzeichen erleichtern, werden aber natürlich nicht benötigt).

BEARBEITEN: Wenn dies auch fehlschlägt, versuchen Sie, das char-Array der Zeichenfolge (u.toCharArray()) zu drucken, falls es in der Mitte einige seltsame Zeichen enthält.

+0

auch wenn Sie trimmen, "Hello" und "Hell o" wird false zurückgeben, da das Trimmen nur führende und tailing Leerzeichen entfernt, nicht Leerzeichen in der Mitte – Stultuske

+0

@dquijada danke für den Tipp. Ich fand heraus, dass das Array-Attribut Leerzeichen mit Attrib [j] .length() enthielt. Dann habe ich den Inhalt getrimmt, und Viola, My Code funktioniert wie erwartet. –