对包含特殊字符(如重音符号)的数组进行排序

2022-09-02 12:15:57

有人知道如何用带有特殊字符(如重音符号)的单词对数组进行排序吗?

Arrays.sort(anArray);

返回之前,我想要之前。'Albacete''Álava''Álava''Albacete'

多谢


答案 1

如果您只想对字符串进行排序,就好像它们没有重音符号一样,则可以使用以下方法:

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


答案 2

你应该看看基于规则的整理器

RuleBasedCollator 类是 Collator 的一个具体子类,它提供了一个简单的、数据驱动的表排序规则器。使用此类,您可以创建基于表的自定义排序规则器。基于规则的协作器将字符映射到排序键。

RuleBasedCollator在效率方面有以下限制(其他子类可用于更复杂的语言):

如果指定了由 控制的特殊排序规则,则该规则将应用于整个排序规则对象。所有未提及的字符都位于排序规则顺序的末尾。