有人知道如何使用带有特殊字符(如重音符号)的单词来命令数组吗?
Arrays.sort(anArray);
在'Albacete'
之前返回'Álava'
,我想在'Álava'
之前'Albacete'
。
非常感谢
答案 0 :(得分:18)
如果您只想对字符串进行排序,就好像它们没有重音一样,您可以使用以下内容:
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);
}
});
相关问题:
对于更复杂的用例,您需要阅读java.text.Collator
。这是一个例子:
Collections.sort(strs, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
Collator usCollator = Collator.getInstance(Locale.US);
return usCollator.compare(o1, o2);
}
});
如果预定义的排序规则都不符合您的要求,您可以尝试使用java.text.RuleBasedCollator
。
答案 1 :(得分:1)
你应该看看RuleBasedCollator
RuleBasedCollator类是Collator的具体子类 提供了一个简单的,数据驱动的表格整理器。有了这堂课你 可以创建一个自定义的基于表格的Collator。 RuleBasedCollator地图 用于对键进行排序的字符。
RuleBasedCollator对效率有以下限制(其他子类可用于更复杂的语言):
如果指定了由a控制的特殊排序规则 适用于整个collator对象。所有未提及的字符都是 在整理顺序结束时。
答案 2 :(得分:0)
使用类似下面的比较器:)并对列表进行排序
Comparator<String> accentIgnorantComparator = (o1, o2) -> {
return StringUtils.stripAccents(o1).compareTo(StringUtils.stripAccents(o2));
};