Регулярное выражение, безусловно, кажется разумным первым шагом.Вы знаете о Comparator ?Он определяет метод int compare(T one, T two)
, который имеет обычную семантику int-as-сравнение-результат.Если у вас есть экземпляр Comparator
, вы можете передать его методам сортировки, таким как Collections.sort
.
Итак, один из подходов - написать Comparator<String>
, метод compare
которого использует регулярное выражениечтобы извлечь две части числа строк, а затем делает числовое сравнение.Проблема в том, что вы будете выполнять этот анализ каждый раз, когда смотрите на каждую строку, что может стоить дорого.
Альтернативой может быть создание TreeMap<Integer,String>
и вставка пар ключ-значение, гдеключ - это проанализированный int, а значение - исходная строка.Затем вы можете просто перебрать набор значений, и они будут отображаться в ключевом порядке.Вероятно, это был бы подход, который я выбрал бы.
EDIT yytg поднимает хороший вопрос, который заключается в том, что для такого простого разбора, вы бы точно так же хорошо разбили на "\\."
(с ограничением 2) и разбор левой стороны.Вы также можете использовать String.indexOf
, чтобы найти точку, а затем String.substring
, чтобы получить часть строки слева от точки.