Java 使用特殊字符(如重音符号)排序数组
有人知道如何使用带有特殊字符(如重音)的单词来排序数组吗Java 使用特殊字符(如重音符号)排序数组,java,arrays,character-encoding,Java,Arrays,Character Encoding,有人知道如何使用带有特殊字符(如重音)的单词来排序数组吗 Arrays.sort(anArray) 返回'Albacete'之前的'Albacete',我想在'Albacete'之前返回'Albacete' 非常感谢您应该看看 RuleBasedCollector类是Collator的一个具体子类,它 提供一个简单的、数据驱动的表格整理器。有了这门课你 可以创建自定义的基于表格的折叠器。基于规则的振荡器映射 用于对键进行排序的字符 RuleBasedCalator对效率有以下限制(其他子类可用于
Arrays.sort(anArray)代码>
返回'Albacete'
之前的'Albacete'
,我想在'Albacete'
之前返回'Albacete'
非常感谢您应该看看
RuleBasedCollector类是Collator的一个具体子类,它
提供一个简单的、数据驱动的表格整理器。有了这门课你
可以创建自定义的基于表格的折叠器。基于规则的振荡器映射
用于对键进行排序的字符
RuleBasedCalator对效率有以下限制(其他子类可用于更复杂的语言):
如果指定了由控制的特殊排序规则,则
应用于整个collator对象。所有未提及的字符均为
在排序规则顺序的末尾
如果只想对字符串进行排序,就好像它们没有重音一样,可以使用以下命令:
Collections.sort(strs, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
o1 = Normalizer.normalize(o1, Normalizer.Form.NFD);
o2 = Normalizer.normalize(o2, Normalizer.Form.NFD);
return o1.compareTo(o2);
}
});
如果预定义的排序规则都不符合您的需要,您可以尝试使用。使用类似以下的比较器:)并对列表进行排序
Comparator<String> accentIgnorantComparator = (o1, o2) -> {
return StringUtils.stripAccents(o1).compareTo(StringUtils.stripAccents(o2));
};
Comparator accentIgnorantComparator=(o1,o2)->{
返回StringUtils.stripeAccents(o1).compareTo(StringUtils.stripeAccents(o2));
};
您必须编写自己的比较器
并将其传递给数组。sort()
。默认情况下,字符串是根据自然顺序排序的。(请注意,如果您使用的是数组而不是列表,则可以从Collections.sort
更改为Arrays.sort
。Normalizer.Form.NFD
非常好地将法语的“重音”排序为常规的“E”之后。谢谢仅供参考:我发现Normalizer.Form.NFD有问题。。。波兰语“Ł”在Z之后排序,应该在“L”之后。这让我大吃一惊,因为所有其他重音字母都排序得很好!我想知道这是不是一个错误。确认了,这是一个错误。为了修复它,你可以切换到,但我不想让我的应用程序变大,所以我只编写了一个实用函数return Normalizer.normalize(src,form).replaceAll(“Ł”,“L”)代码>
Comparator<String> accentIgnorantComparator = (o1, o2) -> {
return StringUtils.stripAccents(o1).compareTo(StringUtils.stripAccents(o2));
};