我需要按名称按正确顺序对文件进行排序,就像在默认的 Windows 资源管理器中一样。
标准的 java 字符串比较器运行良好,直到只有字母值。如果名称中有任何数字,则工作错误,例如:
名称为“15 - abc.txt”的文件将在列表中高于“2 - abc.txt”。
对于多语言案例(应使用 java.text.Collator),解决此问题的最佳方法是什么?
问问题
2563 次
3 回答
3
实现您自己的比较器,根据需要考虑数字。此比较器可以按组拆分文件名:数字与其他字符分开。
例如15-abc-32b.txt
会产生数组{"15", "abc", "32", "b"}
。现在比较这些数组很简单。您应该检查元素并尝试使用Integer.pareseInt()
. 如果解析成功比较适当的数字,否则比较字符串。
于 2013-04-04T13:49:52.607 回答
1
使用 Java Comparator 并通过按顺序分别比较文件名的整数和字符串字段来实现 compare() 方法。
于 2013-04-04T13:49:21.193 回答
1
考虑到 NumberFormat 将“15-abc-32b.txt”解析为 15(参见 API),您可以像这样对文件进行排序
String[] files = new File("dir").list();
Arrays.sort(files, new Comparator<String>() {
NumberFormat f = NumberFormat.getInstance();
public int compare(String f1, String f2) {
try {
return Double.compare(f.parse(f1).longValue(), f.parse(f2).longValue());
} catch (ParseException e) {
throw new IllegalArgumentException(f1 + "|" + f2);
}
}
});
于 2013-04-04T14:04:25.700 回答