java排序键排序错误
我在比较字符串时遇到了一个问题。我想比较两个像这样的“ed”和“ef”法语文本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
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如果存在主要差异,则不考虑二级/三级差异。