我需要按正确的顺序按名称对文件进行排序,例如在默认的Windows资源管理器中
标准的java String Comparator工作正常,直到只有字母值。如果名称中有任何数字,则表示错误,例如:
名称为“15 - abc.txt”的文件将在列表中位于“2 - abc.txt”之上。
解决多语言案例的最佳方法是什么(应该使用java.text.Collator)?
答案 0 :(得分:3)
实施您自己的比较器,根据需要考虑数字。此比较器可以按组拆分文件名:与其他字符分开的数字。
例如15-abc-32b.txt
将生成数组{"15", "abc", "32", "b"}
。现在比较这样的数组很简单。您应该检查元素并尝试使用Integer.pareseInt()
解析它们。如果解析成功,则比较适当的数字,否则比较字符串。
答案 1 :(得分:1)
使用Java Comparator并通过按顺序分别比较文件名的整数和字符串字段来实现compare()方法。
答案 2 :(得分: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);
}
}
});