繁体   English   中英

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

[英]how to sort with different number of digits in java?

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

感谢帮助!

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

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));
}

如果您有一个字符串数组,您可以编写自定义比较器

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;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM