如何在java中使用不同的位数排序?

时间:2015-07-08 16:22:16

标签: java sorting

我使用f.listFiles()在目录中创建了一个文件列表 不幸的是,他们的名字非常不同,如: 001.pdf
098.pdf
100.pdf
1000例.pdf
现在,目录中的文件数组在100.pdf之前设置了1000.pdf 我该如何对文件进行排序以使文件以正确的顺序返回?

感谢您的帮助!

2 个答案:

答案 0 :(得分:6)

您可以在空格前添加相同长度的名称:

File[] files = f.listFiles();
if(files != null) {
    Arrays.sort(files, new Comparator<File>() {
        @Override
        public int compare(File o1, File o2) {
            return String.format("%100s", o1.getName()).compareTo(
                   String.format("%100s", o2.getName()));
        }
    });
    System.out.println(Arrays.toString(files));
}

如果您使用的是Java-8,则更短:

File[] files = f.listFiles();
if(files != null) {
    Arrays.sort(files, Comparator.comparing(file -> String.format("%100s", file.getName())));
    System.out.println(Arrays.toString(files));
}

答案 1 :(得分:3)

如果您有一个字符串数组

,您可以编写自定义比较器
public class StringComparator implements Comparator<String> {
    @Override
    public int compare(String s1, String s2) {
       int n1 = Integer.parseInt(s1.substring(0, s1.indexOf(".") - 1));
       int n2 = Integer.parseInt(s2.substring(0, s2.indexOf(".") - 1));
       return n1 - n2;
    }
}