应用按名称排序时的顺序错误

时间:2018-08-22 11:41:12

标签: java android sorting filesystems android-file

我在Android设备中存储的文件夹中有一些文件。

文件夹名称=英语/

文件名= 001-001-0000.png,001-001-000.png,001-001-001.png,001-001,002.png,001-001-003.png ...直至001-001 -010.png

我必须按照它们的名称按顺序将它们加载到屏幕上。 我正在使用此代码

String[] files = dir.list();
    Arrays.sort(files, new Comparator<String>() {
        @Override
        public int compare(String o1, String o2) {
            return o1.compareToIgnoreCase(o2);
        }
    });

我得到的结果是

001-001-000.png 001-001-0000.png 001-001-001.png 001-001,002.png 001-001-003.png ... 001-001-010.png

但是当我在Windows PC上检查资源管理器时 我有

001-001-0000.png 001-001-000.png 001-001-001.png 001-001,002.png 001-001-003.png ... 001-001-010.png

此处的区别在于,以四个0结尾的文件(001-001-0000.png)在以三个0结尾的文件(001-001-000.png)之前 并且我的代码中需要相同的排序顺序。

2 个答案:

答案 0 :(得分:1)

尝试使用此compare方法:

@Override
public int compare(String o1, String o2) {
    String o1_prefix = o1.split(".")[0];
    String o2_prefix = o2.split(".")[0];
    if(o1_prefix.startsWith(o2_prefix)) 
        return -1;
    else if(o2_prefix.startsWith(o1_prefix)) 
        return 1;
    else return o1.compareToIgnoreCase(o2);
}

答案 1 :(得分:0)

Windows之类进行排序的原因是因为Windows从Windows 7开始使用“数字排序”。这意味着Windows通过增加数值来对文件进行数字排序。如果您不希望Windows按此数字顺序排序,则可以关闭此功能。

我的来源:http://www.alliancegroup.co.uk/windows7-explorer-sort-order.htm