加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java Collat??ionKey排序错误

发布时间:2020-12-15 03:02:12 所属栏目:Java 来源:网络整理
导读:我在比较字符串时遇到问题.我想比较两个“éd”和“ef”这样的法语文本 Collator localeSpecificCollator = Collator.getInstance(Locale.FRANCE);CollationKey a = localeSpecificCollator.getCollationKey("éd");CollationKey b = localeSpecificCollator
我在比较字符串时遇到问题.我想比较两个“é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类似,如果不相同的话:

A tertiary difference is ignored when there is a primary or secondary difference anywhere in the strings.

换句话说,因为您的2个字符串只能通过查看主要差异(不包括重音符号)进行排序,因此整理者不会检查其他差异.

它似乎符合Unicode Collation Algorithm (UCA):

Accent differences are typically ignored,if the base letters differ.

根据wikipedia article on “ordre alphabetique”,它似乎也是用法语按字母顺序排序的正确方法:

En première analyse,les caractères accentués,de même que les majuscules,ont le même rang alphabétique que le caractère fondamental
Si plusieurs mots ont le même rang alphabétique,on tache de les distinguer entre eux grace aux majuscules et aux accents (pour le e,on a l’ordre e,é,è,ê,?)

在英语中:顺序最初忽略重音和案例 – 如果2个单词无法按此方式排序,则会考虑重音和大小写.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读