如何在Java中以Unicode码点为基础比较两个字符串的字典序?

16

我正在编写一个Java程序,有一个特定的需求需要按Unicode码点将字符串按字典顺序排序。这与使用String.compareTo()进行比较在处理基本多文种平面之外的值时是不同的。String.compareTo()按16位char值的字典顺序比较字符串。要看到这不等价,请注意U+FD00阿拉伯语连字哈希与耶独立形式小于U+1D11E音乐符号G大调谱号,但Java String对象中阿拉伯字符的"\uFD00"比谱号的代理对"\uD834\uDD1E"更大。

如果必要,我可以手动使用String.codePointAt()Character.charCount()循环遍历代码点并自行进行比较。是否有API函数或其他更"规范"的方法可以做到这一点?


你确定需要按字典顺序排序,而不考虑规范化、区域设置等因素吗? - Jon Skeet
1
@JonSkeet 不知道。该格式旨在成为任何人都可以使用任何语言生成的开放标准。我考虑过指定UTF-16代码单元顺序的选项,但我不太喜欢它,因为许多较新的语言不会本地使用UTF-16编码。我还与我的团队合作,试图想出一种避免在格式规范中指定排序的方法,但我们所想到的一切都比解决问题更加麻烦。 - Aaron Rotenberg
1
好的,我不知道比使用codePointAt和手动迭代更好的方法...很抱歉没有能够给你一个更加规范的方法,但听起来你已经在正确的方向上了。 - Jon Skeet
2
你需要查看 java,text.Collator - user207421
@EJP 会给出所描述的行为的 Collator 实例是什么?请记住,我不是在寻找适合语言环境的排序,而是寻找以语言环境和平台无关的非常特定的排序。 - Aaron Rotenberg
显示剩余2条评论
1个回答

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接