重命名文件以按特定顺序按字母顺序排列它们?

时间:2019-09-15 13:14:53

标签: java sorting letter

我的问题归结为: 我需要按特定顺序对文件进行排序(文件开头带有数字)。后来我想将它们存储在外部,然后根据文件所在的系统对文件进行字母排序,这对我没有影响。那么我该如何重命名它们以使其保持正确顺序呢?

// this comparator sorts them by alphabetical order 
    Comparator<Mp3File> compAlphabetical = (x,y) -> getMp3TitleFromFilename(x).compareTo(getMp3TitleFromFilename(y));

//and this one does by number
//the inputs look like this "582 Some File Name" so they have to be edited with some regex before using them for sorting
Comparator<Mp3File> compNumeric = new Comparator<Mp3File>() {

            @Override
            public int compare(Mp3File o1, Mp3File o2) {
                Integer i1 = Integer.parseInt(getMp3TitleFromFilename(o1).substring(0,3).replaceAll("[^0-9]", ""));
                Integer i2 = Integer.parseInt(getMp3TitleFromFilename(o2).substring(0,3).replaceAll("[^0-9]", ""));
                return i1.compareTo(i2);
            }
        };

我想要实现的是一种使用正确的排序(第二个)比较器获取列表并重命名文件的方法,即使我在列表上运行第一个Comparator,它们也可以保持其顺序。

现在,按字母排序将部分正确的顺序输出。看起来像这样:

  • 1个文件名
  • 10个其他文件名
  • 100个好的文件名
  • 101更好的文件名
  • 102另一个文件
  • 103个非常好的文件名

但这并不是我真正想要的,所以我想到了像这样在开头加上一些字母:

  • 一个AAA文件
  • AAB另一个文件
  • AAC和
  • AAD如此
  • AAE开

但是我不知道如何将这些数字正确转换为char以及如何使其在Java中运行。也许你们中的一个对我有一个主意如何解决这个问题?预先感谢!

1 个答案:

答案 0 :(得分:0)

因此,您的代码当前正在对lexicographical order中的字符串进行排序,这基本上意味着该语言将变量视为字符串并对其进行排序,将字符串在每个位置的每个字符与另一个字符串对应的字符及其字符进行比较相应的位置(例如,“ 2”大于“ 1999999”,因为“ 2”大于“ 1”)。

如果您曾经查看过包含节目片段的文件夹(例如S3E08),则可能已经看到了此问题及其解决方案。您会注意到它们在情节编号前加了'0',这样词典编排排序就不会弄乱我们期望的正确字母顺序。

这是我建议您执行的操作,下面将举一个文件名示例的示例:

  • 001一个文件名
  • 010另一个文件名
  • 100个好的文件名
  • 101更好的文件名
  • 102另一个文件
  • 103个非常好的文件名

执行此操作的算法非常简单,因此我将由您自己决定!如果您对实施有任何疑问,请随时发回