2017-05-12 2 views
0

Ich habe folgende Funktion, die Eingabe ist nur ein einfacher String.Warum gibt es null vor meiner frischen Schnur?

public X509CertificateHandler getCertByFingerprint(String thumbPrint) { 
    if (_thumbprintMap.containsKey(thumbPrint)) { 
     return _thumbprintMap.get(thumbPrint); 
    } 
} 

Also in meinem Testfall, ich bin der Wert nur hartzucodieren es nur zu testen, aber ich brauche sie Groß zu sein, so dass ich werfen es in Apache Common, einfach nicht wahr?

certs.getCertByFingerprint(StringUtils.upperCase("‎eb55b661dd9133bc564aa259bcd0c598ce02892f")); 

Nun ist die Komische ist, dass, wenn ich in meiner Funktion Schritt erwartet der String-Wert ist, den Ball in die Funktion anders als ich!

Aus irgendeinem Grund scheint am Anfang der Variablen eine null zu sein! den folgenden Putting es in meinem Gesichtsausdruck zu sehen, die ich erhalte:

enter image description here

Wie Sie sehen können, gibt es ein extra [, Zeichen vor dem String ... Dies ist der Grund, warum ich nicht finden konnte, was ich von meinem Array suche! Aber warum?

Um sicherzustellen, dass ich nicht verrückt bin, lief ich folgendes:

String fingerprint = "‎eb55b661dd9133bc564aa259bcd0c598ce02892f"; 
String f2 = StringUtils.upperCase(fingerprint); 
f2.equals(fingerprint); 

Da ich die Zeichenfolge bin initialisieren, gibt es keine Möglichkeit, dass ich eine null vor ihm bekommen .. aber immer noch die oben Code gab mir immer noch [, vor meiner frischen Schnur ... wtf?

+0

Ihre Methode wird nicht kompiliert. – shmosel

+0

"Aus irgendeinem Grund scheint am Anfang der Variablen eine Null zu sein!" Das ist praktisch unmöglich. Ein 'String' in Java verwendet einen' char [] 'als Backing-Speicher und Sie können keine' null'-Werte in einem primitiven Array speichern. Und das '[' ist Teil der 'String'-Darstellung des Arrays, kein Zeichen. Es sollte ein ']' auf der rechten Seite sein. – Turing85

+0

@ Turing85 Ich weiß, weshalb es mich verrückt macht. Wenn du dir meinen Screenshot anschaust, verwende ich die erste Zeile, wenn ich die Variable verwende, die zweite Zeile benutze den fest codierten Wert. Es konnte den Schlüssel in meiner Karte nicht finden, aber es tut, wenn ich den Hardcode-Wert zur Verfügung stelle. – codenamezero

Antwort

3

Sie haben ein unsichtbares Zeichen am Anfang Ihrer Zeichenfolge, die . Versuchen Sie, diese Zeile ausgeführt wird:

System.out.println(
     "eb55b661dd9133bc564aa259bcd0c598ce02892f".length() < 
     "‎eb55b661dd9133bc564aa259bcd0c598ce02892f".length() 
); 

Ausgang:

true 

Sie aussehen identisch, aber die zweite hat Ihre verborgenen Charakter. Nimm die erste Saite und du solltest gut sein.

+0

OMFG, das ist es ... Ich kann es nicht glauben ... Ich habe die Zeichenfolge aus dem Microsoft-Zertifikatsfenster per Copy-Paste gepackt. Ich hatte keine Ahnung, woher der unsichtbare Sai kommt. Ich habe sogar die Linienmarkierungen von Eclipse eingeschaltet lol ... Danke! – codenamezero

1

Lassen Sie mich zunächst kurz über Ihre erste Annahme hinsichtlich der null Wert sprechen. Wenn Sie sich die Implementierung von String ansehen, sehen Sie, dass ein String einen char[] als Sicherungsspeicher verwendet. In Java ist es unmöglich, einen null Wert in einem primitiven Array zu speichern.

Es ist jedoch ein unsichtbares Zeichen zwischen dem " und der e in dieser Codezeile:

String fingerprint  = "‎eb55b661dd9133bc564aa259bcd0c598ce02892f"; 
String fingerprintFixed = "eb55b661dd9133bc564aa259bcd0c598ce02892f"; 

Wie in shmosel's answer gezeigt wird, werden diese String s unterschiedliche Längen aufweisen. Setzen Sie einfach den Cursor zwischen " und e, drücken Sie die Löschtaste und Sie sollten gut gehen (oder kopieren fingerprintFixed von oben).

+0

Ich hätte Ihre Antwort auch akzeptiert, aber ich nahm @smosels Antwort, da er zuerst bei beiden Gelegenheiten antwortete. Danken! – codenamezero

Verwandte Themen