Ash*_*hot 7 java locale compare
我在比较字符串时遇到问题.我想比较两个"éd"和"ef"这样的法语文本
Collator localeSpecificCollator = Collator.getInstance(Locale.FRANCE);
CollationKey a = localeSpecificCollator.getCollationKey("éd");
CollationKey b = localeSpecificCollator.getCollationKey("ef");
System.out.println(a.compareTo(b));
Run Code Online (Sandbox Code Playgroud)
这将打印-1,但在法语字母表e之前é.但是当我们只比较e并é喜欢这样的时候
Collator localeSpecificCollator = Collator.getInstance(Locale.FRANCE);
CollationKey a = localeSpecificCollator.getCollationKey("é");
CollationKey b = localeSpecificCollator.getCollationKey("e");
System.out.println(a.compareTo(b));
Run Code Online (Sandbox Code Playgroud)
结果是1.你能告诉我们第一部分代码有什么问题吗?
这似乎是预期的行为,也是用法语按字母顺序排序的正确方法。
在Android的javadoc中给出了一个提示,为什么它的行为就像是-我想执行的细节在android系统是相似的,如果不相同,在标准JDK:
当字符串中任何地方存在一次或二次差异时,将忽略三次差异。
换句话说,由于仅通过查看主要差异(不包括重音符号)就可以对您的2个字符串进行排序,因此整理程序不会检查其他差异。
它似乎符合Unicode排序算法(UCA):
如果基本字母不同,通常会忽略口音差异。
根据Wikipedia上有关“ ordre Alphabetique”的文章,这似乎也是用法语按字母顺序排序的正确方法:
进行高级分析,重音符号,
大型艺术作品,古典音乐的基本特征,以及在古典音乐上的古典音乐,古典艺术在l'ordre e,é,è,ê,ë)
用英语:顺序最初会忽略重音和大小写-如果无法以这种方式对2个单词进行排序,则会考虑重音和大小写。
| 归档时间: |
|
| 查看次数: |
617 次 |
| 最近记录: |