【发布时间】: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() 方法正确排序。当数值在字符串中时,它们不是整数类型,而是字符串类型。因此,无论列表是否包含以数字开头的名称,您的第一个比较器都应该可以正常工作。当然,除非您根本不希望名称以数字开头。这当然可以实现。