Java列表按名称排序(整数)

时间:2015-03-18 15:38:17

标签: java list sorting

我有一个名为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());
                }
            });

3 个答案:

答案 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);
    }
} });