我有一个包含版本号的字符串,比如major.minor.patch.build,但是我只想保留major.minor.patch,其中每个版本号可以有1-3个数字。我如何在groovy中做到这一点?结果示例:1.20.30.44 -> 1.20.30或1.21.1.1 -> 1.21.1
1.20.30.44 -> 1.20.30
1.21.1.1 -> 1.21.1
ymzxtsji1#
这将适用于所提供的示例。
def majorMinorPatchBuild = '1.20.30.44' def majorMinorPatch if (majorMinorPatchBuild.toList().count('.') < 3) { majorMinorPatch = majorMinorPatchBuild } else { majorMinorPatch = majorMinorPatchBuild.split('\\.')[0..-2].join('.') } assert majorMinorPatch == '1.20.30'
请注意,如果输入数据有一些格式偏差,则必须实现一些错误处理。测试更多数据:
[ '1.2.3', '1.2.3.4', '11.22.33.44', '111.222.333.444' ].each { def majorMinorPatchBuild = it def majorMinorPatch if (majorMinorPatchBuild.toList().count('.') < 3) { majorMinorPatch = majorMinorPatchBuild } else { majorMinorPatch = majorMinorPatchBuild.split('\\.')[0..-2].join('.') } println("major.minor.patch: '$it' -> '$majorMinorPatch'") }
输出量:
major.minor.patch: '1.2.3' -> '1.2.3' major.minor.patch: '1.2.3.4' -> '1.2.3' major.minor.patch: '11.22.33.44' -> '11.22.33' major.minor.patch: '111.222.333.444' -> '111.222.333'
qeeaahzv2#
在Groovy中,这基本上应该是一行程序。
String listBased = '1.20.30.44'.split( /\./ ).take 3 join '.' String regexBased = '1.20.30.44'.replaceFirst( /(.+)\.[^.]+/, '$1' ) assert listBased == '1.20.30' assert regexBased == '1.20.30'
apeeds0o3#
此表达式返回versionString中最后一个点之前的子字符串,因此结果与您在问题中指定的结果完全相同:
versionString = '1.20.30.44' println versionString[0..versionString.lastIndexOf('.')-1] // => 1.20.30
3条答案
按热度按时间ymzxtsji1#
这将适用于所提供的示例。
请注意,如果输入数据有一些格式偏差,则必须实现一些错误处理。
测试更多数据:
输出量:
qeeaahzv2#
在Groovy中,这基本上应该是一行程序。
apeeds0o3#
此表达式返回versionString中最后一个点之前的子字符串,因此结果与您在问题中指定的结果完全相同: