java排序键排序错误

java排序键排序错误,java,compare,locale,Java,Compare,Locale,我在比较字符串时遇到了一个问题。我想比较两个像这样的“ed”和“ef”法语文本 Collator localeSpecificCollator = Collator.getInstance(Locale.FRANCE); CollationKey a = localeSpecificCollator.getCollationKey("éd"); CollationKey b = localeSpecificCollator.getCollationKey("ef"); System.out.pr

我在比较字符串时遇到了一个问题。我想比较两个像这样的“ed”和“ef”法语文本

Collator localeSpecificCollator = Collator.getInstance(Locale.FRANCE);
CollationKey a = localeSpecificCollator.getCollationKey("éd");
CollationKey b = localeSpecificCollator.getCollationKey("ef");
System.out.println(a.compareTo(b));
Collator localeSpecificCollator = Collator.getInstance(Locale.FRANCE);
CollationKey a = localeSpecificCollator.getCollationKey("é");
CollationKey b = localeSpecificCollator.getCollationKey("e");
System.out.println(a.compareTo(b));
这将打印
-1
,但法语字母
e
位于
e
之前。但是当我们只比较
e
e
时,就像这样

Collator localeSpecificCollator = Collator.getInstance(Locale.FRANCE);
CollationKey a = localeSpecificCollator.getCollationKey("éd");
CollationKey b = localeSpecificCollator.getCollationKey("ef");
System.out.println(a.compareTo(b));
Collator localeSpecificCollator = Collator.getInstance(Locale.FRANCE);
CollationKey a = localeSpecificCollator.getCollationKey("é");
CollationKey b = localeSpecificCollator.getCollationKey("e");
System.out.println(a.compareTo(b));
结果是
1
。您能告诉我们代码的第一部分出了什么问题吗?

来自:

您可以设置拼贴器的“强度”属性,以确定在比较中被视为显著差异的级别。提供了四种强度:一级、二级、三级和相同。语言特征的确切强度分配取决于语言环境。例如,在捷克语中,“e”和“f”被视为主要差异,“e”和“ě”是次要差异,“e”和“e”是三级差异,“e”和“e”是相同的

尝试不同的优势:

localeSpecificCollator.setStrength(Collator.PRIMARY);

看看会发生什么。

这似乎是预期的行为,这似乎也是按法语字母顺序排序的正确方法。

给出了一个关于为什么它会这样的提示-我想android中的实现细节与标准JDK类似,如果不是完全相同的话:

当字符串中的任何位置存在主差异或次差异时,将忽略第三个差异

换句话说,由于您的两个字符串仅通过查看主要差异(不包括重音)进行排序,所以排序器不会检查其他差异

它似乎符合以下要求:

如果基字母不同,则通常忽略重音差异

而且,这似乎也是按法语字母顺序排序的正确方法,根据:

在高级分析中,强调重点,强调重点,强调重点,强调重点,强调重点。
在主旋律和主旋律的区分上,我用了一个字母来表达我对主旋律和主旋律的理解


在英语中:顺序最初忽略重音和大小写-如果两个单词不能按这种方式排序,则会考虑重音和大小写。

我有“相同的问题”(我认为可以接受)对于
Win1250-2
eq.
iso8859-1/2
,在
JTable
中为
RowSorter
RowFilter
使用
比较器及其
Swing
实现,其中对于所有非ASCII字符,例如e->e.i.,抱歉,永远不需要解决这个问题,因为这是可以接受的,而且符合逻辑ordering@Tichodroma如果存在主要差异,则不考虑二级/三级差异。