正则表达式按名称排序文件(数字名称)

时间:2014-03-28 17:42:31

标签: java regex

我比较某些目录的文件名并订购它。问题是每个文件名都是一个数字,有些是104,有些是5568,有些是50.而且它们在我的阵列上乱了。我正在使用RegexFileFilter对它进行排序,但我需要一个正则表达式来纠正它:

我可以使用什么样的正则表达式?提前谢谢!

String pattern = "^[a-zA-Z0-9_]*$";
System.out.println("\nFiles that match regular expression: " + pattern);
FileFilter filter = new RegexFileFilter(pattern);
files = directory.listFiles(filter);
displayFiles(files);


Files that match regular expression: ^[a-zA-Z0-9_]*$
File: 1048576              Last Modified:Fri Mar 28 14:01:50 BRT 2014
File: 1064960              Last Modified:Fri Mar 28 14:01:50 BRT 2014
File: 1073756160           Last Modified:Fri Mar 28 14:01:47 BRT 2014
File: 1073764352           Last Modified:Fri Mar 28 14:01:48 BRT 2014
File: 1073780736           Last Modified:Fri Mar 28 14:01:28 BRT 2014
File: 1073788928           Last Modified:Fri Mar 28 14:01:28 BRT 2014
File: 1073797120           Last Modified:Fri Mar 28 14:01:28 BRT 2014
File: 1073805312           Last Modified:Fri Mar 28 14:01:28 BRT 2014
File: 1073813504           Last Modified:Fri Mar 28 14:01:28 BRT 2014
File: 1073821696           Last Modified:Fri Mar 28 14:01:29 BRT 2014
File: 537410560            Last Modified:Fri Mar 28 14:01:50 BRT 2014

1 个答案:

答案 0 :(得分:0)

  1. 匹配名称仅包含数字(其中一个或多个)的文件使用[0-9]+\\d+

    • \\d代表数字,类似于[0-9]
    • 中描述的范围或0-9
    • +表示"一个或多个"
  2. 此处可使用Regex过滤文件。如果您以后需要对它们进行排序,您可以使用它们 Arrays.sort(T[] array)按字母顺序排序("11"将在"2"之前)或使用
    public static <T> void sort(T\[\] a, Comparator<? super T> c)使用您自己的比较器,它将名称转换为整数并将它们作为数字进行比较,如

    Comparator<File> nameNumberComparator = new Comparator<File>() {
        @Override
        public int compare(File f1, File f2) {
            return Integer.compare(Integer.valueOf(f1.getName()),
                    Integer.valueOf(f1.getName()));
        }
    };
    

    如果你有Java 8,你可以使用lambdas

    Arrays.sort(files, (f1, f2) -> Integer.compare(
            Integer.valueOf(f1.getName()),
            Integer.valueOf(f2.getName())
    ));