对具有本地化的字符串列表进行排序

我想按照用户区域设置对字符串列表进行排序

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

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

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

我试过了

Collections.sort(words , String.CASE_INSENSITIVE_ORDER);

但是这不适用于本地化,那么如何将locale参数传递给或者有没有其他有效的方法?Collections.sort()


答案 1

您可以将排序与自定义比较器一起使用。请参阅整理器界面

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

归类器是一个比较器,可以直接传递给该方法。Collections.sort(...)


答案 2

我认为这是你应该使用的 - 整理器

类执行区分区域设置的字符串比较。使用此类可以为自然语言文本生成搜索和排序例程。

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

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德沃夏克所说,它实际上是一个比较器,所以你只需创建它与所需区域设置的结合,设置强度并通过排序方法传递它:

Collactor usCollator = Collator.getInstance(Locale.US); //Your locale here
usCollator.setStrength(Collator.PRIMARY); //desired strength
Collections.sort(yourList, usCollator);

推荐