如何在Groovy中解析一个版本号字符串?

ocebsuys  于 2022-11-01  发布在  其他
关注(0)|答案(3)|浏览(144)

我有一个包含版本号的字符串,比如major.minor.patch.build,但是我只想保留major.minor.patch,其中每个版本号可以有1-3个数字。我如何在groovy中做到这一点?
结果示例:1.20.30.44 -> 1.20.301.21.1.1 -> 1.21.1

ymzxtsji

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'
qeeaahzv

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'
apeeds0o

apeeds0o3#

此表达式返回versionString中最后一个点之前的子字符串,因此结果与您在问题中指定的结果完全相同:

versionString = '1.20.30.44'
println versionString[0..versionString.lastIndexOf('.')-1]
// => 1.20.30

相关问题