Macht Java-String.getBytes("UTF-8") erhalten lexicograhpical bestellen?
Wenn ich eine alphabetisch sortierte Liste von Java-Strings [s1,s2,s3,s4, ...., sn]
, und dann konvertieren Sie jede Zeichenfolge in ein byte-array mit UTF-8-Codierung bx = sx.getBytes("UTF-8")
ist die Liste von byte-arrays, die [b1,b2,b3,...bn]
auch lexikographisch sortiert?
- da UTF-8 ist ein variabler Breite Codierung, ich würde sagen, dass die Sortierreihenfolge wird nicht beibehalten
- Ich bin mir nicht sicher, deine Frage macht keinen Sinn; wie würden Sie Sortieren bits/bytes lexikographisch? Den Zeichensatz, den Sie anzeigen bits/bytes ist der entscheidende Faktor.
- Roach Lexikographische Ordnung auf byte-arrays ist ähnlich wie bei Strings. Ersetzen Sie einfach "Charakter x" mit "byte bei x". Siehe z.B. stackoverflow.com/questions/5108091/...
- Nicht unbedingt. Ich brauche nicht zu vergleichen, alle bytes, wird nur bis zum ersten Unterschied. Da UTF-8 reversibel ist der erste Unterschied in der Länge für 2 Zeichen sollten andeuten Unterschied in bytes von deren Codierung. Ich bin mir allerdings nicht sicher, ob dies genug, um zu bewahren, um.
- Aber UTF-8 wurde speziell zur Erhaltung der Sortierreihenfolge trotzdem.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja. Nach RFC-3239:
Als Ian Roberts darauf hingewiesen, dies gilt für "wahr UTF-8 (wie
String.getBytes
geben Sie)", aber hüten Sie sich vorDataInputStream
'N fake UTF-8, die Sortieren [U+000000] nach [U+000001] und [U+00F000] nach [U+10FFFF].String.getBytes
geben Sie), aber nicht unbedingt für die "modifizierten UTF-8" verwendetDataInputStream
und Freunde.Erhalten Sie eine Liste/array von Objekten X, die in einem bestimmten orden.
Erstellen Sie eine neue Liste/array Y von solchen Objekten, die Anwendung der Methode.
Y wird die Bestellung, die Sie erstellt es mit (normalerweise haben Sie nur gehalten, X, um). Keine Neuanordnung geschieht.
Auch, lexycographical Bestellung für ein byte[] ist bedeutungslos.