使用本地化排序字符串列表

时间:2012-10-15 05:28:12

标签: java sorting collections localization locale

我想按照用户区域设置

排序下面的字符串列表
List<String> words = Arrays.asList(
      "Äbc", "äbc", "Àbc", "àbc", "Abc", "abc", "ABC"
    );

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

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

我试过

Collections.sort(words , String.CASE_INSENSITIVE_ORDER);

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

3 个答案:

答案 0 :(得分:49)

您可以使用自定义Comparator进行排序。请参阅Collator interface

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

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

答案 1 :(得分:24)

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

  

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

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

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所说,它实际上是一个比较器,所以你可以用所需的语言环境创建它,设置强度并将它传递给sort方法:

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

答案 2 :(得分:2)

export default class Order extends Component {
  render() {

    return (


    )
  }
}