Для 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 или другой более "канонический" способ сделать это?