2016-05-30 1 views
1

pardon my english.Как правильно сортировать строку с разными цифрами в Java?

с этим кодом,

Collections.sort(mEntries, new Comparator<ZipEntry>() { 
      public int compare(ZipEntry a, ZipEntry b) { 
       return a.getName().compareTo(b.getName()); 
      } 
     }); 

когда есть строки, как это: hello1,hello3,hello2,hello11,hello10

он будет отсортирован в этом: hello1,hello10,hello11,hello2,hello3

результат я хочу заключается в следующем:

hello1,hello2,hello3,hello10,hello11 

но когда есть строки с th Такие же цифры цифр, как это, он может правильно отсортировать его.

от этого: hello01,hello03,hello02,hello11,hello10.

в этом: hello01,hello02,hello03,hello10,hello11

любая идея, как я могу получить результат я хочу?

hello1,hello2,hello3,hello10,hello11 

спасибо.

ответ

0

Текущая сортировка, которую вы используете, является естественной (лексикографической) сортировкой, полученной путем вызова compareTo на String.

Согласно лексикографической сортировке, "10" наступает до"2".

Сортировка, которую вы хотите для String s с тем же основанием, заканчивающимся цифрами, представляет собой числовую сортировку, которая является естественной сортировкой для Number s (арифметика).

Согласно естественной Number сортировки, 10 придет после2.

Что вы хотите, чтобы:

  • Получить как String s
  • Убедитесь, что их единственным отличием является последнее число (регулярные выражения)
  • Если нет, сравнить их лексикографически, как вы уже делает
  • Если вместо этого единственная разница - это последнее число, затем извлекайте последние цифры и создайте два Integer s (через регулярное выражение и Integer.parseInt идиома)
  • Затем вызывается метод compareTo на тех Integer с и возвращает результат
0

фигу, он работает с этим

Collections.sort(mEntries, new Comparator<ZipEntry>() { 
      public int compare(ZipEntry a, ZipEntry b) { 


       return String.format("%100s", a.getName()).compareTo(
         String.format("%100s", b.getName())); 
      } 
     }); 


     return null; 

позаимствована

how to sort with different number of digits in java?

+0

это будет по-прежнему сортировать по строке, но не на основе чисел в соответствии с вашим требованием. Вы подтверждаете, что это исправляет ваши требования? –

Смежные вопросы