我比较某些目录的文件名并订购它。问题是每个文件名都是一个数字,有些是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
答案 0 :(得分:0)
匹配名称仅包含数字(其中一个或多个)的文件使用[0-9]+
或\\d+
\\d
代表数字,类似于[0-9]
+
表示"一个或多个" 此处可使用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())
));