我的问题归结为: 我需要按特定顺序对文件进行排序(文件开头带有数字)。后来我想将它们存储在外部,然后根据文件所在的系统对文件进行字母排序,这对我没有影响。那么我该如何重命名它们以使其保持正确顺序呢?
// 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,它们也可以保持其顺序。
现在,按字母排序将部分正确的顺序输出。看起来像这样:
但这并不是我真正想要的,所以我想到了像这样在开头加上一些字母:
但是我不知道如何将这些数字正确转换为char以及如何使其在Java中运行。也许你们中的一个对我有一个主意如何解决这个问题?预先感谢!
答案 0 :(得分:0)
因此,您的代码当前正在对lexicographical order中的字符串进行排序,这基本上意味着该语言将变量视为字符串并对其进行排序,将字符串在每个位置的每个字符与另一个字符串对应的字符及其字符进行比较相应的位置(例如,“ 2”大于“ 1999999”,因为“ 2”大于“ 1”)。
如果您曾经查看过包含节目片段的文件夹(例如S3E08),则可能已经看到了此问题及其解决方案。您会注意到它们在情节编号前加了'0',这样词典编排排序就不会弄乱我们期望的正确字母顺序。
这是我建议您执行的操作,下面将举一个文件名示例的示例:
执行此操作的算法非常简单,因此我将由您自己决定!如果您对实施有任何疑问,请随时发回