TL;DR
Java использует два символа для представления UTF-16. Использование Arrays.sort (нестабильная сортировка) портит последовательность символов. Должен ли я конвертировать char [] в int [] или есть лучший способ?
подробности
Java представляет символ как UTF-16. Но сам класс Character
упаковывает char
(16 бит). Для UTF-16 это будет массив из двух char
(32 бит).
Сортировка строки символов UTF-16 с использованием встроенной сортировки портит данные. (Arrays.sort использует быструю сортировку с двумя поворотами, а Collections.sort использует Arrays.sort для выполнения тяжелой работы.)
Если быть точным, вы конвертируете char [] в int [] или есть лучший способ сортировки?
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[] utfCodes = {128513, 128531, 128557};
String emojis = new String(utfCodes, 0, 3);
System.out.println("Initial String: " + emojis);
char[] chars = emojis.toCharArray();
Arrays.sort(chars);
System.out.println("Sorted String: " + new String(chars));
}
}
Выход:
Initial String: 😁😓😭
Sorted String: ??😁??