Сортировать массив строк как лексикографически, так и численно (так как строка содержит цифры) - PullRequest
0 голосов
/ 18 марта 2020

У меня есть строка, содержащая числа. Я хочу отсортировать его так, как если бы вывод был лексикографически отсортирован, а затем по номерам в конце. Я сделал это ниже, но сложность этого очень велика. Есть ли другой способ отсортировать это? Не хочу использовать Arrays.sort напрямую

Ожидаемый вывод - [blue1, blue3, red3, red6]

 public class SortStrings {

public static void main(String[] args) {

    String a[] = { "blue3", "red6", "red3","blue1" };
    String tmp;
    for (int i = 0; i < a.length; i++) {
        for (int j = i; j < a.length - i-1; j++) {
            if (a[j].compareTo(a[j + 1]) > 0) {
                tmp = a[j];
                a[j] = a[j + 1];
                a[j + 1] = tmp;
            }
        }
    }
    List<String> strings = Arrays.asList(a);
      Collections.sort(strings, new Comparator<String>() {
            public int compare(String o1, String o2) {
                return extractInt(o1) - extractInt(o2);
            }

            int extractInt(String s) {
                String num = s.replaceAll("\\D", "");
                // return 0 if no digits found
                return num.isEmpty() ? 0 : Integer.parseInt(num);
            }
        });
    System.out.println(Arrays.toString(a));
}

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...