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

Ответы