Сортировка строк по алфавиту, в которых есть цифры - PullRequest
1 голос
/ 16 апреля 2019

Я довольно новичок в вопросах программирования / алгоритмов на Java и не могу понять этот тип алгоритма сортировки.

Допустим, у меня есть несколько String элементов в массиве или массиве.

"She ate 10 eclair"
"She ate 99 donuts"
"She had 20 eclair"
"She had 10 eclair"

Когда я сортирую эти строки, вопрос алгоритма требует, чтобы я сначала пропустил цифры и отсортировал их по алфавиту. Как это:

"She ate 99 donuts"
"She ate 10 eclair"
"She had 10 eclair"
"She had 20 eclair"

Поэтому, когда я использую обычные методы Collections.sort() или compareTo(), в этих строках используются цифры. Мне трудно строить логику из этого алгоритма сортировки.

Я посмотрел на подход естественной сортировки, но я не уверен, что я на правильном пути, так как я очень новичок.

Так что я собираюсь сравнить это на символ и проверить, является ли текущий индекс цифрой или нет? Или я собираюсь преобразовать каждый символ в шестнадцатеричное значение и сравнить строки?

Предлагает ли Java какой-либо метод, который может помочь мне с этим разделением?

Любая помощь, руководство, документация, фрагмент будут высоко оценены.

Привет.

Ответы [ 3 ]

2 голосов
/ 16 апреля 2019

Вы можете предоставить компаратор в метод Collections.sort(), который будет сортировать независимо от любых цифр во входных строках:

List<String> list = ... ; //your list
Collections.sort(list, (a, b) -> a.replaceAll("[\\d]", "").compareTo(b.replaceAll("[\\d]", "")));
1 голос
/ 16 апреля 2019

Для сортировки часто получается искусственный ключ сортировки.

Для последовательных цифр для сопоставления одному и тому же символу можно сделать:

private String sortKey(String s) {
    return s.replaceAll("\\d+", "0");
}

Что бы заменить 10 и 99 на 0.

Регулярное выражение:

  • \\d цифра
  • оператор постфикса +: один или несколько
0 голосов
/ 16 апреля 2019
  1. Преобразование списка строк в список пользовательских объектов.Каждый из этих пользовательских объектов будет содержать ссылку на соответствующую исходную строку.
  2. Сортировка второго списка с использованием пользовательского Comparator.
  3. Преобразование второго списка обратно в список строк (поизвлечение исходных строк).

Пользовательский объект будет состоять из следующего:

  • ссылка на исходную строку
  • измененная строка (например, замененные числас «%»)
  • число (или список чисел)

Пользовательский Comparator будет сравниваться только с использованием измененной строки и числа (-ов).

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