如何在Java中正确排序不同数字的字符串?

时间:2016-05-30 09:13:41

标签: java android zip

请原谅我的英语。

使用此代码,

 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

但是当存在具有相同数字的字符串时,它可以正确地对其进行排序。

来自:hello01,hello03,hello02,hello11,hello10.

进入:hello01,hello02,hello03,hello10,hello11

任何想法如何实现我想要的结果?

hello1,hello2,hello3,hello10,hello11
谢谢。

2 个答案:

答案 0 :(得分:0)

您正在使用的当前排序是自然(词典)String排序,通过在compareTo上调用String得出。

根据词典排序,"10""2"之前来自

对于具有相同基数(以数字结尾)的String所需的排序是数字排序,这是Number s(算术)的自然排序。

根据自然Number排序,10将在 2之后来。

你想要的是:

  • 检索String s
  • 验证他们唯一的区别是最后一个号码(使用正则表达式)
  • 如果没有,请按照字面意思对它们进行比较
  • 相反,唯一的区别是 最后一个数字,然后检索最后一个数字并创建两个Integer s(通过正则表达式和Integer.parseInt成语)
  • 然后在compareTo上调用Integer方法并返回结果

答案 1 :(得分: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?