Java数组排序UTF-8

Min*_*tis 20 java sorting collation utf-8

我想排序,ArrayList<String>但问题是我的母语字符 - 我的字母是这样的:a, ?, b, c, ?, d, e, f ... z, ž.如你所见,z字符从结尾开始?是第二位,在字母表中排在第二位,因此在对数组进行排序后,它排序不正确.我的所有母语字符都移动到数组的末尾.例:

package lt;

import java.util.ArrayList;
import java.util.Collections;

public class test {
    public static void main(String[] args) {
        List<String> items = new ArrayList<>();
        items.add("bbc");
        items.add("?bc");
        items.add("abc");
        items.add("zzz");

        System.out.println("Unsorted: ");
        for(String str : items) {
            System.out.println(str);
        }

        Collections.sort(items);
        System.out.println();

        System.out.println("Sorted: ");
        for(String str : items) {
            System.out.println(str);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

Unsorted: 
bbc
?bc
abc
zzz

Sorted: 
abc
bbc
zzz
?bc
Run Code Online (Sandbox Code Playgroud)

应该:

Sorted:
abc
?bc
bbc
zzz
Run Code Online (Sandbox Code Playgroud)

Vic*_*Vic 22

你应该使用Collat​​or类.

例如

Locale lithuanian = new Locale("lt_LT");
Collator lithuanianCollator = Collator.getInstance(lithuanian);
Run Code Online (Sandbox Code Playgroud)

然后使用此collat​​or对集合进行排序

Collections.sort(theList, lithuanianCollator);
Run Code Online (Sandbox Code Playgroud)

  • 如果语言环境不支持您的语言,那么您就遇到了麻烦.幸运的是,根据这个:http://www.oracle.com/technetwork/java/javase/javase7locales-334809.html立陶宛语在java 7中由Locale支持.由于没有常量,你需要构造自己的Locale实例:Locale lithuanian = new Locale("lt_LT"); (3认同)
  • 这个答案是正确的,但是没有必要创建一个Comparator - Collat​​or已经是Comparator的一个实例.Collections.sort(myList,Collat​​or.getInstance(Locale.FRENCH)); 是完整的代码. (2认同)

Kri*_*ris 5

您可以使用Collat​​or进行区域设置敏感的字符串比较.