Java数组排序UTF-8

时间:2012-02-13 13:24:02

标签: java sorting utf-8 collation

我想对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);
        }
    }
}

输出:

Unsorted: 
bbc
ąbc
abc
zzz

Sorted: 
abc
bbc
zzz
ąbc

应该是:

Sorted:
abc
ąbc
bbc
zzz

2 个答案:

答案 0 :(得分:22)

您应该使用Collator类。

例如

Locale lithuanian = new Locale("lt_LT");
Collator lithuanianCollator = Collator.getInstance(lithuanian);

然后使用此整理器对集合进行排序

Collections.sort(theList, lithuanianCollator);

答案 1 :(得分:5)

您可以使用Collator进行区域设置敏感的字符串比较。