我正在尝试解决一个小问题,它是代码的一部分,它基本上通过版本文件检查版本与其他机器上的版本。它查看这些文件的名称,并删除当前的所有字符。
起初,我尝试过:
private String getLatestVerFile( List<String> verFiles ) {
String latestVerFile = null;
long lastMod = Long.MIN_VALUE;
for (String file : verFiles ) {
if ( Long.parseLong( file.replaceAll( "[^0-9]", "" ) ) > lastMod ) {
latestVerFile = file;
lastMod = Long.parseLong( file.replaceAll( "[^0-9]", "" ) );
}
}
return latestVerFile;
}
这里的问题是给定了多个版本文件,它意味着返回最新的一个,在某些情况下它不会:
ex:
R9.10 = 910
R9.26_P1 = 9261
R9.01 = 901
R10.1 = 101
在这种情况下,R10.1 将是最新版本。
就我个人而言,我希望他们采用更标准和更直接的版本编号方案,但这不在我的控制范围内。
我的想法是尝试将其作为双重处理。我认为您可以在某些 Google 搜索中使用 [^0-9.],如下所示。
private String getLatestVerFile( List<String> verFiles ) {
String latestVerFile = null;
double lastMod = Double.MIN_VALUE;
for (String file : verFiles ) {
if ( Double.parseDouble( file.replaceAll( "[^0-9.]", "" ) ) > lastMod ) {
latestVerFile = file;
lastMod = Double.parseDouble( file.replaceAll( "[^0-9.]", "" ) );
}
}
return latestVerFile;
}
也就是说,它不起作用。我认为可能是因为文件名是 R9.10.ver,例如,它可能会以“9.10”的形式出现。并试图使它成为双倍。一位同事说要使用 R(\d+.\d+)(_P\d+1).ver,但我不知道从哪里开始,也不知道它如何知道从字符串中过滤掉什么。
目标是得到这个:
ex:
R9.10 = 9.10
R9.20_P1 = 9.201
R10.11 = 10.11
R10.20_P1 = 10.201
但我特别纠结于如何完成这项工作。建议?我想我的部分问题是我真的不太了解正则表达式,以及如何选择要忽略模式的哪些部分。