在 *Unicode 码位* 上按字典顺序比较两个 Java 字符串的首选方法是什么?

2022-09-03 08:13:43

对于我正在编写的Java程序,我特别需要按Unicode码位对字符串进行字典排序。这与开始处理基本多语言平面之外的值时不同。 在 16 位值上按字典顺序比较字符串。要查看这不是等效的,请注意 U+FD00 阿拉伯语连字 HAH 与 YEH 隔离形式小于 U+1D11E 音乐符号 G CLEF,但阿拉伯语字符的 Java 对象比 clef 的代理项对大。String.compareTo()String.compareTo()charString"\uFD00""\uD834\uDD1E"

我可以使用 String.codePointAt()Character.charCount() 手动循环代码点,并在必要时自己进行比较。是否有API函数或其他更“规范”的方式来执行此操作?


答案 1

它被称为排序规则。查看 https://docs.oracle.com/javase/tutorial/i18n/text/locale.html

请注意,数据库也可以使用排序规则对查询结果进行排序。例如,请参阅 mysql 支持 https://dev.mysql.com/doc/refman/5.0/en/charset-charsets.html


答案 2