2

我需要按名称按正确顺序对文件进行排序,就像在默认的 Windows 资源管理器中一样。
标准的 java 字符串比较器运行良好,直到只有字母值。如果名称中有任何数字,则工作错误,例如:
名称为“15 - abc.txt”的文件将在列表中高于“2 - abc.txt”。
对于多语言案例(应使用 java.text.Collat​​or),解决此问题的最佳方法是什么?

4

3 回答 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 回答