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

我想按照用户区域设置排序下面的字符串列表

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

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

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

我试过了

 Collections.sort(words , String.CASE_INSENSITIVE_ORDER); 

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

您可以使用自定义Comparator进行排序。 请参阅Collat​​or界面

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

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

我认为这应该是你应该使用的 – 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);