应用按名称排序时顺序错误
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
我在 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