【问题标题】:Sorting files doesn't go as planned文件排序未按计划进行
【发布时间】:2020-01-02 19:37:50
【问题描述】:

我有一个名为file001-file002...file099 的文件列表。我使用以下代码对它们进行排序,但我的文件仍列为file001-file010-file011...file002-file020...,而它们应按字母顺序排序为file001 file002 file003 file004 file005 ...file099

如何解决这个问题?

File folder = new File("g:\");

 File[] listOfFiles = folder.listFiles();
 Arrays.sort(listOfFiles);

for (File file : listOfFiles) {
    if (file.isFile()) {
        //do sth
    }
}

编辑

我希望根据文件名称的字母数字顺序对我的文件进行排序:

 file001
 file002
 file003
 file004
 file005
 ...file099

【问题讨论】:

  • 不是对文件进行排序,而是对文件名进行排序。
  • 或者,为排序方法提供一个适当的比较器:Arrays.sort(files, Comparator.comparing(File::getName)); 应该会产生预期的结果。
  • String 的自然排序是按字典顺序排列的,您正在寻找自然排序,其中给定的String 可能包含数字,并且您希望按字母顺序对字母排序,但在数字上按数字排序。
  • 由于new File("g:\") 无法编译,我认为这不是您的实际代码。您描述的文件应该按照您的预期排序,假设它们都以file 这四个字母开头,并以三个数字结尾。编辑您的问题并显示我们可以自己测试的实际代码。 (我怀疑您实际上没有名为file001 的文件,而是file01——两位数,而不是三位。)

标签: java file sorting filenames


【解决方案1】:

它是 Alphanum 算法,在这里得到了很好的解释:https://blog.codinghorror.com/sorting-for-humans-natural-sort-order/ 并在这里回答了 Sort on a string that may contain a number

【讨论】:

  • 您好,请不要仅使用链接发布答案。也不要发布其他答案的链接。首先,因为链接可能会被破坏并且您的答案不再有用,其次,如果您知道 SO 已经有答案,只需将问题标记为重复。如果您认为您提供的链接确实有用,请在您的答案中添加它的重要部分,该链接应该只是对它的引用。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-02
  • 2015-12-24
  • 1970-01-01
相关资源
最近更新 更多