对包含特殊字符(如重音符号)的数组进行排序
2022-09-02 12:15:57
有人知道如何用带有特殊字符(如重音符号)的单词对数组进行排序吗?
Arrays.sort(anArray);
返回之前,我想要之前。'Albacete'
'Álava'
'Álava'
'Albacete'
多谢
有人知道如何用带有特殊字符(如重音符号)的单词对数组进行排序吗?
Arrays.sort(anArray);
返回之前,我想要之前。'Albacete'
'Álava'
'Álava'
'Albacete'
多谢
如果您只想对字符串进行排序,就好像它们没有重音符号一样,则可以使用以下方法:
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
。
你应该看看基于规则的整理器
RuleBasedCollator 类是 Collator 的一个具体子类,它提供了一个简单的、数据驱动的表排序规则器。使用此类,您可以创建基于表的自定义排序规则器。基于规则的协作器将字符映射到排序键。
RuleBasedCollator在效率方面有以下限制(其他子类可用于更复杂的语言):
如果指定了由 控制的特殊排序规则,则该规则将应用于整个排序规则对象。所有未提及的字符都位于排序规则顺序的末尾。