如何在Groovy中提取子字符串?

时间:2014-07-31 16:18:02

标签: string syntax groovy substring

我有一个Groovy方法,目前有效,但真实丑陋/ hacky看起来:

def parseId(String str) {
    System.out.println("str: " + str)
    int index = href.indexOf("repositoryId")
    System.out.println("index: " + index)
    int repoIndex = index + 13
    System.out.println("repoIndex" + repoIndex)
    String repoId = href.substring(repoIndex)
    System.out.println("repoId is: " + repoId)
}

当它运行时,您可能得到如下输出:

str: wsodk3oke30d30kdl4kof94j93jr94f3kd03k043k?planKey=si23j383&repositoryId=31850514
index: 59
repoIndex: 72
repoId is: 31850514

正如您所看到的,我只是想从字符串中获取repositoryId值(=运算符之后的所有内容)。是否有一种更有效/更彻底的方式来做这个或这是唯一的方法?

3 个答案:

答案 0 :(得分:13)

有很多方法可以达到你想要的效果。我建议使用split

进行简单的建议
sub = { it.split("repositoryId=")[1] }

str='wsodk3oke30d30kdl4kof94j93jr94f3kd03k043k?planKey=si23j383&repositoryId=31850514'

assert sub(str) == '31850514'

答案 1 :(得分:12)

使用正则表达式,你可以

def repositoryId = (str =~ "repositoryId=(.*)")[0][1]

=~是正则表达式匹配器

答案 2 :(得分:1)

或快捷方式正则表达式 - 如果您只查找单个匹配项:

String repoId = str.replaceFirst( /.*&repositoryId=(\w+).*/, '$1' )