TLDR
Java使用两个字符来表示UTF-16。使用Arrays.sort(不稳定的排序)会使字符排序混乱。我应该将char []转换为int []还是有更好的方法?
细节
Java将字符表示为UTF-16。但是Character类本身会包装char(16位)。对于UTF-16,它将是2的数组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));
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
Initial String:
Sorted String: ????
Run Code Online (Sandbox Code Playgroud)