Java массив сортировки UTF-8 - PullRequest
       22

Java массив сортировки UTF-8

20 голосов
/ 13 февраля 2012

Я хочу отсортировать 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 ]

22 голосов
/ 13 февраля 2012

Вы должны использовать Collator class.

Например

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

А затем отсортируйте коллекцию с помощью этого коллатера

Collections.sort(theList, lithuanianCollator);
5 голосов
/ 13 февраля 2012

Вы можете использовать Collator для сравнения строк с учетом локали.

...