2009-07-27 6 views
0

korrigieren Sie mich, wenn ich falsch liege.toLowerCase mit speziellen/Unicode-Zeichen wirft Ausnahme

Wenn str ein Zeichen wie "" drin hat, dann läuft:

str.toLowerCase(Locale.English); 

wirft eine Null-Zeiger-Ausnahme. Das ist das Verhalten, das ich sehe.

Also, was ist der Deal hier? Was ist los? Es wird nicht angegeben, dass toLowerCase eine Nullzeigerausnahme auslöst.

Gibt es einen einfachen Weg, um dies zu umgehen? Ich brauche das Kleinbuchstabe, um in der Lage zu sein, eine Groß-/Kleinschreibung zu verwenden, die mit einem anderen String überprüft wird, aber ich brauche den String, um diese Zeichen zu enthalten, damit es richtig angezeigt wird.

Was wäre Ihrer Meinung nach die effizienteste Lösung, wenn es keinen "einfachen Weg" gibt?

+3

sind Sie sicher, 'str' ist nicht' null'? – jjnguy

+3

Sind Sie sicher, dass "str" ​​nicht "null" ist? –

+2

Die wahrscheinlichste Erklärung ist, dass str in diesem Code-Snippet null ist. Wenn nicht, können Sie den genauen Wert von str angeben, wenn Sie den Fehler erhalten? – Yishai

Antwort

2

Anstatt in Kleinbuchstaben zu konvertieren, würde ich vorschlagen, die String object's equalsIgnoreCase() method versuchen.

Obwohl, wie die Kommentare sagen, gibt es keinen Grund für die toLowerCase()-Funktion, eine Nullzeigerausnahme zu werfen, es sei denn, ein Parameter ist null. Ich würde entweder einen Debugger verwenden, um den Status str zu überprüfen oder den Funktionsaufruf toLowerCase() in eine if-Anweisung umbrechen, und wenn str null ist, etwas tun (wie eine Ausnahme auslösen, eine Anweisung drucken, eine Nachricht protokollieren) und den Funktionsaufruf nicht ausführen .

2

Hmm, es funktioniert für mich:

String upper = new String("asdCSD4rSDFSDFS•••••••••XCj"); 
String lower = upper.toLowerCase(Locale.ENGLISH); 
System.out.println("Lower " + lower); 

Lower asdcsd4rsdfsdfs•••••••••xcj