【问题标题】:Renaming files to structure them alphabetically in a specific order?重命名文件以按特定顺序按字母顺序排列它们?
【发布时间】:2020-01-16 13:24:53
【问题描述】:

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

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

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

现在,按字母排序会产生部分正确的顺序。它看起来像这样:

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

但这并不是我真正想要的,所以我想在开头放一些字母,如下所示:

  • AAA 一个文件
  • AAB 另一个文件
  • AAC 和
  • AAD 所以
  • AAE 开启

但我不知道如何正确地将这些数字转换为字符以及如何使其在 Java 中工作。也许你们中的一个人对我有一个想法如何解决这个问题?提前致谢!

【问题讨论】:

  • 我很难理解为什么以数字开头的 string 文件名会对这些名称的排序造成问题。食物链中的数值足够低(可以这么说),它们应该使用 Arrays.sort() 或 Collections.sort() 方法正确排序。当数值在字符串中时,它们不是整数类型,而是字符串类型。因此,无论列表是否包含以数字开头的名称,您的第一个比较器都应该可以正常工作。当然,除非您根本不希望名称以数字开头。这当然可以实现。

标签: java sorting letter


【解决方案1】:

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

如果您曾经查看过包含节目剧集的文件夹(例如 S3E08),那么您可能已经看到了这个问题及其解决方案。你会注意到他们在剧集编号前加上了一个“0”,这样词典排序就不会弄乱我们期望的正确字母顺序。

这是我建议你做的,我将在下面举例说明文件名的样子:

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

执行此操作的算法相当简单,所以我将由您来完成!如果您对实施有任何疑问,请随时回复

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多