- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我在比较字符串时遇到问题。我想像这样比较两个“é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 tâche de les distinguer entre eux grâce aux majuscules et aux accents (pour le e, on a l'ordre e, é, è, ê, ë)
在英语中:该顺序最初会忽略重音和大小写 - 如果 2 个单词不能以这种方式排序,则会考虑重音和大小写。
关于java CollationKey排序错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11899516/
我是一名优秀的程序员,十分优秀!