Каков предпочтительный способ сравнить два Java-строки лексикографически на * кодовых точках Unicode *?
Для Java-программы, которую я пишу, мне особенно нужна сортировка строк лексикографически по кодовой точке Unicode. Это не то же самое, что String.compareTo()
, когда вы начинаете работать со значениями за пределами базовой многоязычной плоскости. String.compareTo()
сравнивает строки лексикографически по 16-разрядным значениям char
. Чтобы убедиться, что это не эквивалентно, обратите внимание, что U + FD00 ARABIC LIGATURE HAH WITH YEH ISOLATED FORM меньше, чем U + 1D11E MUSICAL SYMBOL G CLEF, но объект Java String
"\uFD00"
для арабского символа сравнивается больше, чем суррогат пара "\uD834\uDD1E"
для ключа.
Я могу вручную прокрутить кодовые точки с помощью String.codePointAt()
и Character.charCount()
и при необходимости выполнить сравнение. Есть ли функция API или другой более "канонический" способ сделать это?
Ответы
Ответ 1
Его называют Collations. См. https://docs.oracle.com/javase/tutorial/i18n/text/locale.html
Обратите внимание, что ваша база данных также может сортировать результаты запроса с помощью сопоставлений. См. Например, что mysql поддерживает https://dev.mysql.com/doc/refman/5.0/en/charset-charsets.html