У меня есть строка, содержащая числа. Я хочу отсортировать его так, как если бы вывод был лексикографически отсортирован, а затем по номерам в конце. Я сделал это ниже, но сложность этого очень велика. Есть ли другой способ отсортировать это? Не хочу использовать 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));
}
}