@lacredin
Программист

Как отсортировать числа в конец массива?

Как настроить сортировку так, чтобы строки, начинающиеся с цифр, попадали в конец списка?
Общее правило сортировки такое - (А-Я, A-Z, 0-9)
Для того, чтобы русские символы стояли на первом месте, я использую Collator.
  • Вопрос задан
  • 79 просмотров
Пригласить эксперта
Ответы на вопрос 2
longclaps
@longclaps
Ты точно программист?

ps Всё, разобрались: настоящий программист и фанат коллатора. Ну как скажешь. Вот минимальный пример.
package newjavaapplication;

import java.util.Arrays;
import java.text.RuleBasedCollator;
import java.text.ParseException;

public class NewJavaApplication {
    public static void main(String[] args) throws ParseException {
        RuleBasedCollator myCollator = new RuleBasedCollator
                ("< а,А < б,Б < в,В < 0 < 1 < 2");
        String[] ar = {"1", "2", "А", "б", "В"};
        Arrays.sort(ar, myCollator);
        for (String s : ar)
            System.out.println(s);
    }
}
Ответ написан
@lacredin Автор вопроса
Программист
Можно вот так сделать. Пример написан на kotlin.
Этот код поместит любую строку, начинающуюся с числа ниже строки, начинающейся с другого символа.
val russianCollator = Collator.getInstance(Locale("ru", "RU"))
val array = arrayListOf("Ab", "01", "Ba", "Aa", "90")
        val russianCollator = Collator.getInstance(Locale("ru", "RU"))
        val array_2 = array.sortedWith(
                kotlin.Comparator { o1, o2 ->
                    if(o1.firstOrNull()?.isDigit() == true && o2.firstOrNull()?.isDigit() == false) return@Comparator  1
                    if(o1.firstOrNull()?.isDigit() == false && o2.firstOrNull()?.isDigit() == true) return@Comparator  -1
                    russianCollator.compare(o1, o2)
                }
        )


Хотя, заявленному в описании требованию, этот код не соответствует, как минимум, символы типа ! +- и тд. будут стоять первыми
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы
BostonGene Москва
от 100 000 до 200 000 руб.
Digital Horizon Москва
от 150 000 руб.
Рекадро Ярославль
от 100 000 руб.
18 янв. 2019, в 14:12
70000 руб./в месяц
18 янв. 2019, в 13:24
500 руб./за проект
18 янв. 2019, в 13:04
12000 руб./в месяц