如何用Groovy将数字分成几部分?

时间:2018-10-23 19:23:12

标签: groovy

有一个数字,格式为DDDDDRRRPC。有必要在C,P,RRR和DDDDDD部分上将其分开。我不确定,但是在Java上看起来像这样

sed 's/\(.*[0-9]\)\S\+/\1/' file

这如何在Groovy上完成?

1 个答案:

答案 0 :(得分:0)

您可以将正则表达式与Groovy的multiple assignment operator配合使用以简化代码。考虑以下示例:

import java.util.regex.Pattern

try {
    String U_id_str = "2100304213"

    Pattern pattern = Pattern.compile(/^([0-9]{5})([0-9]{3})([0-9])([0-9])$/)

    def (_, birthNum, pNum, gend, kNum) = (U_id_str =~ pattern)[0]

    println "birthNum = ${birthNum}, pNum = ${pNum}, gend = ${gend}, kNum = ${kNum}"

} catch (IndexOutOfBoundsException ex) {
    println "Input string does not match regular expression..."
}

在此示例中,我们使用模式^([0-9]{5})([0-9]{3})([0-9])([0-9])$,该模式定义了初始数字的4个部分(表示为字符串)。在第四行,我们使用=~运算符测试输入字符串是否匹配给定模式,该运算符返回java.util.regex.Matcher对象,并将每个匹配部分分配给变量birthNumpNum,{{1 }}和gend。出于安全原因,我们在try-catch块中执行此代码,因为如果输入字符串与给定模式不匹配,kNum可能会抛出(U_id_str =~ pattern)[0]

最后但并非最不重要的一点-请记住,匹配器将匹配的部分作为字符串返回,因此,如果要将这些变量传递给期望例如IndexOutOfBoundsException,您必须使用Integer明确地投射它们。

输出:

Integer.valueOf(...)