我有一个文件名数组,需要根据文件名的扩展名对该数组进行排序。有什么简单的方法可以做到这一点吗?
发布于 2009-01-13 19:39:17
Arrays.sort(filenames, new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
// the +1 is to avoid including the '.' in the extension and to avoid exceptions
// EDIT:
// We first need to make sure that either both files or neither file
// has an extension (otherwise we'll end up comparing the extension of one
// to the start of the other, or else throwing an exception)
final int s1Dot = s1.lastIndexOf('.');
final int s2Dot = s2.lastIndexOf('.');
if ((s1Dot == -1) == (s2Dot == -1)) { // both or neither
s1 = s1.substring(s1Dot + 1);
s2 = s2.substring(s2Dot + 1);
return s1.compareTo(s2);
} else if (s1Dot == -1) { // only s2 has an extension, so s1 goes first
return -1;
} else { // only s1 has an extension, so s1 goes second
return 1;
}
}
});
发布于 2009-01-13 19:35:07
如果我没记错,Arrays.sort(...)获取将用于进行排序的Comparator<>。您可以提供它的一个实现来查看字符串的扩展部分。
发布于 2009-01-13 19:35:27
您可以实现字符串的自定义Comparator。使其按照'.'
的最后一个索引之后的子字符串对它们进行排序。然后将比较器和数组传入
Arrays.sort(stringArray, yourComparator);
// An implementation of the compare method
public int compare(String o1, String o2) {
return o1.substring(o1.lastIndexOf('.')).compareTo(o2.substring(o2.lastIndexOf('.'));
}
https://stackoverflow.com/questions/440430
复制相似问题