Java 检查版本字段大于给定文件名的文件名
我有一个以下格式的文件Java 检查版本字段大于给定文件名的文件名,java,comparison,Java,Comparison,我有一个以下格式的文件update\u 0\u 9\u 26。我想编写java代码,它将检查所有版本大于0\u 9\u 26的文件。例如0\u9\u27等等。我必须对从该计算中检索到的文件进行处理 如何解析文件名以检索大于引用名称的文件名? 输入示例: update_0_9_26.sql update_0_9_27.sql update_0_9_28.sql update_1_0_0.sql update_1_0_1.sql update_1_0_2.sql 预期输出(搜索“大于更新\u
update\u 0\u 9\u 26
。我想编写java代码,它将检查所有版本大于0\u 9\u 26
的文件。例如0\u9\u27
等等。我必须对从该计算中检索到的文件进行处理
如何解析文件名以检索大于引用名称的文件名?
输入示例:
update_0_9_26.sql
update_0_9_27.sql
update_0_9_28.sql
update_1_0_0.sql
update_1_0_1.sql
update_1_0_2.sql
预期输出(搜索“大于更新\u 0\u 9\u 26
”时):
简单的分步指南:
newfile(“myDirName”).list()从文件系统获取文件名
myTreeSet.tailSet(lastFileToNotProcess,'true')
获取仅包含这些元素的集合视图class TokenizingComparator implements Comparator<String> {
private String separator;
private static Pattern intPattern = Pattern.compile("[0-9]+");
public TokenizingComparator(String separator) { this.separator = separator; }
public int compare(String a, String b) {
String pa[] = a.split(separator);
String pb[] = b.split(separator);
for (int ia=0, ib=0; ia<pa.length && ib<pb.length; ia++,ib++) {
int rc = comparePart(pa[ia], pb[ib]);
if (rc != 0) return rc;
}
return (pa.length != pb.length) ?
pa.length - pb.length : 0;
}
private comparePart(String a, String b) {
if (intPattern.matcher(a).matches() && intPattern.matcher(b).matches()) {
return Integer.parseInt(a) - Integer.parseInt(b);
} else {
return a.compareTo(b);
}
}
}
类TokenizingComparator实现Comparator{
专用字符串分隔符;
私有静态模式intPattern=Pattern.compile(“[0-9]+”);
公共TokenizingComparator(字符串分隔符){this.separator=separator;}
公共整数比较(字符串a、字符串b){
字符串pa[]=a.split(分隔符);
字符串pb[]=b.split(分隔符);
对于(int ia=0,ib=0;iaI在那里看不到任何问题。@Sjuan76我编辑了我的问题。编辑是为了使问题更突出。如果编辑过度,请发表评论。
class TokenizingComparator implements Comparator<String> {
private String separator;
private static Pattern intPattern = Pattern.compile("[0-9]+");
public TokenizingComparator(String separator) { this.separator = separator; }
public int compare(String a, String b) {
String pa[] = a.split(separator);
String pb[] = b.split(separator);
for (int ia=0, ib=0; ia<pa.length && ib<pb.length; ia++,ib++) {
int rc = comparePart(pa[ia], pb[ib]);
if (rc != 0) return rc;
}
return (pa.length != pb.length) ?
pa.length - pb.length : 0;
}
private comparePart(String a, String b) {
if (intPattern.matcher(a).matches() && intPattern.matcher(b).matches()) {
return Integer.parseInt(a) - Integer.parseInt(b);
} else {
return a.compareTo(b);
}
}
}