Ich habe die folgende Zeichenfolge (japanisch) "" Das erste Zeichen ist ein Leerzeichen, aber seine Nummer in Unicode ist 12288. Wenn ich also "".trim() ausführe, erhalte ich denselben String (trim funktioniert nicht). Wenn ich trim in C++ ausführe, funktioniert es gut. Weiß jemand, wie man dieses Problem in Java lösen kann? Gibt es eine spezielle Trim-Methode für Unicode?
Antworten
Zu viele Anzeigen?Als Alternative zum StringUtils
Klasse, die Mike erwähnt hat, können Sie auch einen Unicode-fähigen regulären Ausdruck verwenden, der nur die Java-eigenen Bibliotheken nutzt:
"".replaceAll("\\p{Z}", "")
Oder, um wirklich nur zu trimmen, und nicht entfernen Leerzeichen innerhalb der Zeichenfolge:
" ".replaceAll("(^\\p{Z}+|\\p{Z}+$)", "")
をご覧ください。 Unicode-Normalisierung und die Normalisierer Klasse. Die Klasse ist neu in Java 6, aber Sie finden eine entsprechende Version in der ICU4J Bibliothek, wenn Sie eine frühere JRE verwenden.
int character = 12288;
char[] ch = Character.toChars(character);
String input = new String(ch);
String normalized = Normalizer.normalize(input, Normalizer.Form.NFKC);
System.out.println("Hex value:\t" + Integer.toHexString(character));
System.out.println("Trimmed length :\t"
+ input.trim().length());
System.out.println("Normalized trimmed length:\t"
+ normalized.trim().length());
Versuchen Sie die Apache Commons'. StringUtils Klasse. Die Methode StringUtils.strip() sollte für Sie funktionieren.
In den Java-Dokumenten wird erklärt, warum dies nicht funktioniert.
Wenn dieses String-Objekt eine leere Zeichenfolge darstellt, oder die ersten und das letzte Zeichen der Zeichenfolge Zeichenfolge, die durch dieses String Objekt repräsentiert werden, beide einen Code größer als ' \u0020 ' (das Leerzeichen), dann ein Verweis auf dieses String-Objekt zurückgegeben.
Sie könnten Ihre eigene Version leicht erstellen. Vielleicht könnte die Methode codePointAt für diesen Zweck verwendet werden.
http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html