使用Java中的数字名称对文件进行排序

时间:2013-04-04 13:43:41

标签: java file sorting

我需要按正确的顺序按名称对文件进行排序,例如在默认的Windows资源管理器中 标准的java String Comparator工作正常,直到只有字母值。如果名称中有任何数字,则表示错误,例如:
名称为“15 - abc.txt”的文件将在列表中位于“2 - abc.txt”之上。
解决多语言案例的最佳方法是什么(应该使用java.text.Collat​​or)?

3 个答案:

答案 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);
            }
        }
    });