java по - Сортировка списка строк с локализацией





убыванию пример (3)


Я думаю, это то, что вы должны использовать - Collator

Класс Collator выполняет локальное сравнение 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 сказал, это на самом деле компаратор, поэтому вы можете просто создать его intance с желаемой локалью, установить силу и передать ей метод сортировки:

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

Я хочу сортировать ниже Список строк по языку пользователя

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

Для разных пользовательских локалей сортировка должна отличаться в зависимости от локали.

Как отсортировать список выше по языку пользователя?

Я пытался

Collections.sort(words , String.CASE_INSENSITIVE_ORDER);

Но это не работает для локализации, поэтому как передать параметр locale в Collections.sort() или есть ли другой эффективный способ?




Вы можете использовать сортировку с помощью специального Компаратора. См. Интерфейс Collator

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

Коллатор является компаратором и может быть передан непосредственно в метод Collections.sort(...) .




Как насчет:

import java.io.BufferedInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.IOException;    

public static String readInputStreamAsString(InputStream in) 
    throws IOException {

    BufferedInputStream bis = new BufferedInputStream(in);
    ByteArrayOutputStream buf = new ByteArrayOutputStream();
    int result = bis.read();
    while(result != -1) {
      byte b = (byte)result;
      buf.write(b);
      result = bis.read();
    }        
    return buf.toString();
}




java sorting collections localization locale