正则表达式Java可以删除除“.”以外的所有字符双倍/浮动的数字是多少?
我试图解决一个小问题,它是代码的一部分,基本上通过版本文件检查其他机器上的版本。它查看这些文件的名称,并删除当前所有字符
起初,我试着:
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将是最新版本
就我个人而言,我希望他们采用更标准、更直接的版本编号方案,但这超出了我的控制范围
我的想法是把它当作替身处理。我想您可以使用[^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.5版本,它可能会以“9.10”的形式出现试着把它变成双倍。一位同事说他使用R(\d+。\d+)(\u P\d+1)。但是我不知道从哪里开始,或者它如何知道从字符串中过滤出什么
目标是实现以下目标:
ex:
R9.10 = 9.10
R9.20_P1 = 9.201
R10.11 = 10.11
R10.20_P1 = 10.201
但我特别想知道如何才能做到这一点。劝告我想我的部分问题是,老实说,我不太理解正则表达式,以及如何选择要忽略的模式部分
# 1 楼答案
我想说,忘记使用Double(release number是而不是浮点数,),创建自己的类似类release number:
然后,您可以使用正则表达式从每个字符串中获取发布号字段:
在本例中,我们只使用一个简单的正则表达式
\d+\.\d+
,它表示“一个或多个十进制数字,后跟一个点,后跟一个或多个十进制数字”,并搜索文件内容以查找该模式的第一次出现