java Collat??ionKey排序错误
我在比较字符串时遇到问题.我想比较两个“éd”和“ef”这样的法语文本
Collator localeSpecificCollator = Collator.getInstance(Locale.FRANCE); CollationKey a = localeSpecificCollator.getCollationKey("éd"); CollationKey b = localeSpecificCollator.getCollationKey("ef"); System.out.println(a.compareTo(b)); 这将打印-1,但在法语字母e中出现在é之前.但是当我们只比较e和é时 Collator localeSpecificCollator = Collator.getInstance(Locale.FRANCE); CollationKey a = localeSpecificCollator.getCollationKey("é"); CollationKey b = localeSpecificCollator.getCollationKey("e"); System.out.println(a.compareTo(b)); 结果是1.你能告诉我们代码的第一部分有什么问题吗? 解决方法
这似乎是预期的行为,它似乎也是用法语按字母顺序排序的正确方法.
Android javadoc提供了一个关于它为什么表现的暗示 – 我想android中的实现细节与标准JDK类似,如果不相同的话:
换句话说,因为您的2个字符串只能通过查看主要差异(不包括重音符号)进行排序,因此整理者不会检查其他差异. 它似乎符合Unicode Collation Algorithm (UCA):
根据wikipedia article on “ordre alphabetique”,它似乎也是用法语按字母顺序排序的正确方法:
在英语中:顺序最初忽略重音和案例 – 如果2个单词无法按此方式排序,则会考虑重音和大小写. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |