看起来没问题。尝试使用前导零来编号,即filename001.jpg。
通过确定我的意思是操作系统是按照字母(技术上的ASCII字符代码)顺序返回它们。
编辑:正如其他人指出的,最好的方法是自己排序。这样你就不会依赖任何未指定的行为。我提供了一个例子,如何用正则表达式匹配来做到这一点:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
ArrayList<String> toSort = new ArrayList<String>(Arrays.asList(
new String[]{
"filename1.jpg",
"filename11.jpg",
"filename2.jpg",
"filename21.jpg",}));
System.out.println(toSort);
Collections.sort(toSort, new Comparator<String>() {
Pattern pat = Pattern.compile("filename(\\d+)\\.jpg");
public int compare(String a, String b) {
Matcher matA = pat.matcher(a);
Matcher matB = pat.matcher(b);
matA.find();
matB.find();
String ga = matA.group(1);
String gb = matB.group(1);
return Integer.valueOf(ga).compareTo(Integer.valueOf(gb));
}
});
System.out.println(toSort);
}
}
它返回:
[filename1.jpg, filename11.jpg, filename2.jpg, filename21.jpg]
[filename1.jpg, filename2.jpg, filename11.jpg, filename21.jpg]
你为什么不直接用你自己的比较器对文件列表进行排序? – DRCB 2012-03-28 08:12:33