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

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

Как настроить сортировку так, чтобы строки, начинающиеся с цифр, попадали в конец списка?
Общее правило сортировки такое - (А-Я, A-Z, 0-9)
Для того, чтобы русские символы стояли на первом месте, я использую Collator.
  • Вопрос задан
  • 195 просмотров
Пригласить эксперта
Ответы на вопрос 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)
                }
        )


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

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

Войти через центр авторизации
Похожие вопросы