In Anbetracht der folgenden Java-Code, der eine kleine Zeichenfolge Vergleich der German grapheme ßGroß- und Kleinschreibung Vergleiche zwischen den Schauplätzen in Java
String a = "ß";
String b = a.toUpperCase();
assertTrue(a.equalsIgnoreCase(b));
Der Vergleich enthält, nicht auf, weil „ß“ .toUpperCase() tatsächlich gleich „SS“ ist, und Das endet bei einem Check-in equalsIgnoreCase()
. Die Javadocs für toUpperCase()
erwähnen diesen Fall explizit, aber ich verstehe nicht, warum das nicht geht, the capital variant of ß?
Allgemeiner gesagt, wie sollten wir Vergleiche zwischen Groß- und Kleinschreibung vornehmen, möglicherweise über verschiedene Ländergrenzen hinweg? Sollten wir nur immer entweder toUpper()
oder equalsIgnoreCase()
verwenden, aber niemals beides?
Es scheint, dass das Problem ist, dass die Umsetzung der equalsIgnoreCase()
die folgende Überprüfung beinhaltet: anotherString.value.length == value.length
, die mit dem Javadocs für toUpper()
unvereinbar scheint, die besagen:
Da Fall Zuordnungen sind nicht immer 1: 1 char Zuordnungen, die resultierende String möglicherweise eine andere Länge als die ursprüngliche Zeichenfolge.
Sie müssten einen ['Collator'] (http://docs.oracle.com/javase/7/docs/api/java/text/Collator.html) anstelle der integrierten Methoden von' verwenden String'. –
'SS' ist der Großbuchstabe, weil [es ist in Unicode definiert] (http://www.fileformat.info/info/unicode/char/00df/index.htm). –
@AndyTurner das ist seltsam, weil es einen Unicode-Codepunkt für das Großbuchstabe gibt, und definiert dieses Zeichen als Kleinbuchstaben http://www.fileformat.info/info/unicode/char/1e9e/index.htm – Oleksi