gpt4 book ai didi

java - 根据文件名中的日期对文件进行排序

转载 作者:行者123 更新时间:2023-12-01 19:44:52 26 4
gpt4 key购买 nike

我需要根据文件名中的日期对文件进行排序。我已经编写了对文件进行排序的代码,但未按预期运行。

代码:

import java.io.File;
import java.util.Arrays;
import java.util.Comparator;

public class Sorting {

public static void displayFiles(File[] files) {
for (File f : files) {
System.out.println(f.getName());
}
}

public static void main(String[] args) {

File folder = new File("C:\\source");
File[] listOfFiles = folder.listFiles();
Arrays.sort(listOfFiles, getFileComparator());

displayFiles(listOfFiles);
}

protected static Comparator<File> getFileComparator() {
Comparator<File> fileComparator = new Comparator<File>() {
@Override
public int compare(File o1, File o2) {
String o1Date = o1.getName().substring(o1.getName().lastIndexOf("_"));
String o2Date = o2.getName().substring(o2.getName().lastIndexOf("_"));
return o1Date.compareTo(o2Date);
}
};

return fileComparator;
}
}

我的文件是:

abc_2018_11_30.dat
abc_2018_11_30-0002.dat
file_2015_09_28.dat
hi_2015_09_28.dat
xxx_2015_09_28.dat
xyz_ca_2015_09_28.dat

我需要输出为:

file_2015_09_28.dat
hi_2015_09_28.dat
xxx_2015_09_28.dat
xyz_ca_2015_09_28.dat
abc_2018_11_30.dat
abc_2018_11_30-0002.dat

带有 -001、-002...等的文件应按顺序出现在实际文件之后。但我的代码给出的输出为:

file_2015_09_28.dat
hi_2015_09_28.dat
xxx_2015_09_28.dat
xyz_ca_2015_09_28.dat
abc_2018_11_30-0002.dat
abc_2018_11_30.dat

谁能帮我解决这个问题吗?

最佳答案

物有所值。使用正则表达式提取要比较的部分并仅比较此部分。您的订单不起作用,因为“.”出现在“_”之前。

static Pattern pattern=Pattern.compile(".*_([0-9_]{10}.*)\\..*");

public static String extractDate(String in)
{
Matcher m=pattern.matcher(in);
if(m.matches())
return m.group(1);
return in;
}

在比较器中:

return extractDate(o1.getName()).compareTo(extractDate(o2.getName());

关于java - 根据文件名中的日期对文件进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53761082/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com