Как отсортировать массив строк по всему, кроме первой буквы - PullRequest
2 голосов
/ 13 февраля 2020

В моем массиве ожидаются элементы, которые выглядят как "B1" и "C22" для любой буквы A-Z и числа 1-26. Мне нужно отсортировать этот массив численно, чтобы мы не учитывали первый символ строки при сортировке. Так что массив {"B1", "A22", "C9"} будет отсортирован по {"B1", "C9", "A22"}.

Я попытался взять подстроку, но она не работает, так как я не знаю, какие строки будут иметь длину 3, а какие - длину 2.

Ответы [ 2 ]

4 голосов
/ 13 февраля 2020

Вы можете создать свой собственный компаратор, который игнорирует некоторые символы:

Arrays.sort(s, new MyComparator());
System.out.println(Arrays.toString(s));

class MyComparator implements Comparator<String> {


    @Override
    public int compare(String o1, String o2) {

        // Remove the chars you are want to ignore from o1, o2 
        o1 = o1.substring(1);
        o2 = o2.substring(1);
        return Integer.compare(Integer.parseInt(o1),Integer.parseInt(o2));
        // return o1.compareTo(o2); see petr note bellow
    }
}
3 голосов
/ 13 февраля 2020

Если массив содержит огромное количество элементов, вы можете заменить Arrays.sort() на Arrays.parallelSort() для эффективной сортировки.

Arrays.sort(arr, 
    (ele1, ele2) -> ele1.substring(1).compareTo(ele2.substring(1)));

, если вы уверены, что substring(1) содержит только числовое значение c, то вы можете выполнить сортировку следующим образом:

Arrays.sort(arr, (Comparator.comparingInt(element -> 
                            Integer.parseInt(element.substring(1)))));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...