我有一个名为0.jpg,1.jpg
等名称的文件名列表。我想以降序排序它们,但似乎我在做这件事时遇到了麻烦。此外,我注意到升序排序不是我想要的,这是一个例子:
file 1.jpg
file 10.jpg
file 100.jpg
file 101.jpg
...
file 109.jpg
file 11.jpg
所以我的问题是如何正确地进行降序排序? 这就是我现在正在做的事情:
Collections.sort(files, new Comparator<File>() {
@Override
public int compare(File s1, File s2) {
return s1.getName().compareToIgnoreCase(s2.getName());
}
});
答案 0 :(得分:2)
尝试(仅当文件具有相同的名称模式时才有效,即:'file xxx.jpg'
)
Collections.sort(files, new Comparator<File>() {
@Override
public int compare(File s1, File s2) {
int f1 = Integer.parseInt(s1.getName().replace("file ", "").replace(".jpg",""));
int f2 = Integer.parseInt(s2.getName().replace("file ", "").replace(".jpg",""));
return f1 > f2?-1:(f1==f2?0:1);
}
});
答案 1 :(得分:0)
File.getName()
会返回String
,因此预期此排序(1,然后是10,然后是100)。你需要从字符串中提取数字部分(例如使用正则表达式),解析整数(例如,如果捕获的子字符串长度大于零)并比较整数。
答案 2 :(得分:0)
在调用方法之前,您应该解析文件的名称 试试这个:
Arrays.sort(fileArray, new Comparator<File>() {
public int compare(File file1, File file2) {
try {
int i = Integer.parseInt(file1.getName());
int j = Integer.parseInt(file2.getName());
return i - j;
} catch(NumberFormatException e) {
throw new AssertionError(e);
}
} });