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

Wrong order when Sort By Name is applied

我在 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)之前 我的代码中需要相同的排序顺序。

试试这个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);
}

Windows 之所以这样排序,是因为 Windows 使用 "numerical sorting",因为 Windows 7。这意味着 Windows 对文件进行排序通过增加数值来数值化。如果你不想Windows按照这个数字顺序排序,你可以关闭这个功能。

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