У меня есть компаратор, который сортирует массив строк, содержащих буквы и цифры, но не может, как представляется, идентифицировать регулярное выражение, которое сортирует их так, как я и ищу.Сортировка строк, которые содержат целые числа с компаратором
Я использовал this question в качестве ссылки для моего компаратора.
array={string-a01,string-a20,string-a100,string-b01,string-b20,string-b100,string-c01,string-c20,string-c100 etc.}
Collections.sort(array, 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 num.isEmpty() ? 0 : Integer.parseInt(num);
}
});
for (String element : array) {
System.out.println(element);
}
Перед введением компаратор выход был:
string-a01, string-a100, string-a20, string-b01, string-b100, string-b20, string-c01, string-c20, string-c100
Вывод, что этот код производит это:
string-a01, string-b01, string-c01 string-a20, string-b20, string-c20 string-a100, string-b100, string-c100
Выход я хотел бы, чтобы произвести это:
string-a01, string-a20, string-a100, string-b01, string-b20, string-b100, string-c01, string-c20, string-c100
EDIT: Отредактировано для пояснений. Массив был изменен и выведен до добавления компаратора.
Я сделал еще одно обновление, потому что основной вопрос не просил все, что я искал. Дело в том, что он заказывает так: b01, b100, b11, c01, c100, c11 ...массив генерируется динамически и не понимает, что проблема не возникнет с исходным массивом, опубликованным – Jon
@ Jon, Да, я изучал это, но это немного сложнее. –
@ Jon, я изменил ответ. Это работает? –