34

我想根据用户区域设置在字符串列表下方排序

List<String> words = Arrays.asList(
      "Äbc", "äbc", "Àbc", "àbc", "Abc", "abc", "ABC"
    );

对于不同的用户区域设置,排序输出应该根据那里的区域设置不同。

如何根据用户区域设置对上述列表进行排序?

我试过

Collections.sort(words , String.CASE_INSENSITIVE_ORDER);

但这不适用于本地化,那么如何将语言环境参数传递给Collections.sort()或有其他有效的方法吗?

4

3 回答 3

59

您可以使用带有自定义比较器的排序。查看整理器界面

Collator coll = Collator.getInstance(locale);
coll.setStrength(Collator.PRIMARY);
Collections.sort(words, coll);

collat​​or 是一个比较器,可以直接传递给Collections.sort(...)方法。

于 2012-10-15T05:40:06.273 回答
29

我认为这是你应该使用的 -Collator

Collat​​or 类执行对区域设置敏感的字符串比较。您可以使用此类为自然语言文本构建搜索和排序例程。

在比较器中执行以下操作 -

public int compare(String arg1, Sting arg2) {
    Collator usCollator = Collator.getInstance(Locale.US); //Your locale here
    usCollator.setStrength(Collator.PRIMARY);
    return usCollator.compare(arg1, arg2);
}

并将比较器的实例传递给该Collections.sort方法。

更新

就像@Jan Dvorak 说的那样,它实际上是一个比较器,因此您可以使用所需的语言环境创建它的实例,设置强度并将其传递给排序方法:

Collactor usCollator = Collator.getInstance(Locale.US); //Your locale here
usCollator.setStrength(Collator.PRIMARY); //desired strength
Collections.sort(yourList, usCollator);
于 2012-10-15T05:41:05.600 回答
9
List<MODEL> ulke = new ArrayList<MODEL>();

    Collections.sort(ulke, new Comparator<MODEL>() {
        Collator collator = Collator.getInstance(new Locale("tr-TR"));
        @Override
        public int compare(MODEL o1, MODEL o2) {
            return collator.compare(o1.getULKEAD(), o2.getULKEAD());
        }
    });
于 2019-04-01T14:11:06.253 回答