Parse()版本号与groovy脚本?

nxagd54h  于 2022-12-11  发布在  其他
关注(0)|答案(1)|浏览(193)

第一次在这里发帖。我想问一下是否有一种方法可以用groovy脚本解析版本号。
我从Ariba中提取了一个有效载荷,这个问题与一个名为ItemNumber的特定字段有关。起初它是工作的,但这个月我开始检索一个版本而不是一个浮点数。
这是脚本中需要修改的部分,但我找不到修改的方法。

if (ItemNumber?.trim()){
    list.ItemNumber = Double.parseDouble(ItemNumber.toString());
}

任何帮助都是非常感谢的,
谢谢你,科斯塔斯

kb5ga3dv

kb5ga3dv1#

要解析一个版本号,你需要对字符串进行标记化。你应该创建一个Version类来保存版本信息。这在对版本列表进行排序时很有帮助。标记化之后,你可以调用Version构造函数,并将标记作为整数传递。
一旦有了Version对象,就可以访问majorminorpatch等字段。

class Version {
   int major
   Integer minor, patch
   @Override String toString() {
       return [major, minor, patch].findAll().join('.')
   }
}

def parseVersion(String versionString) {
    if (!versionString) return null
    int[] tokens = versionString.split(/\./).collect { it as int }
    return new Version(
        major: tokens[0],
        minor: tokens.length > 1 ? tokens[1] : null,
        patch: tokens.length > 2 ? tokens[2] : null,
    )
}

class Payload {
   String ItemNumber
}

Payload payload = new Payload(ItemNumber: "2.4")
Version version = parseVersion(payload.ItemNumber?.trim())
printf("Major version : %d%n", version.major)
printf("Minor version : %s%n", version.minor ?: "<UNSET>")
printf("Patch version : %s%n", version.patch ?: "<UNSET>")
printf("Full version  : %s%n", version)

在更高版本的Groovy中,可以像这样调用Versions构造函数:

new Version(major: tokens[0], minor: tokens?[1], patch: tokens?[2])

相关问题