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

envsm3lx  于 2022-11-01  发布在  其他
关注(0)|答案(4)|浏览(497)

我有一个Groovy方法,它目前可以工作,但看起来 * 真实的 * 丑陋/陈腐:

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

正如您所看到的,我只是对从String中获取repositoryId值(=操作符之后的所有内容)感兴趣。有没有更高效/Groovier的方法来完成这个任务,或者这是唯一的方法?

zxlwwiss

zxlwwiss1#

有很多方法可以达到你的目的。我建议使用split来实现一个简单的方法:

sub = { it.split("repositoryId=")[1] }

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

assert sub(str) == '31850514'
zengzsys

zengzsys2#

使用正则表达式可以执行以下操作

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

=~是一个正则表达式匹配器

rt4zxlrg

rt4zxlrg3#

或快捷方式regexp -如果您只查找单个匹配项:

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

5cnsuln74#

这里的所有答案都包含正则表达式,但是在Groovy中有一堆字符串方法。
| 字符串函数|样品|项目名称|
| - -|- -|- -|
| 包含|myStringVar.包含(子字符串)|当且仅当此字符串包含指定的字符值序列时,才返回true|
| 相等|myStringVar.相等(子字串)|这与上面的类似,但必须是完全匹配,检查才能返回true值|
| 结束于|我的字符串变量结尾为(后缀)|此方法检查新值是否包含结束字符串|
| 开始于|我字符串变量开始于(前缀)|此方法检查新值是否包含起始字符串|
| 等于忽略大小写|myString变量等于忽略大小写(子字符串)|与equals相同,但不区分大小写|
| 为空|我的字符串变量是空的()|检查是否填充了myStringVar。|
| 符合|myStringVar.匹配项(子字符串)|这与equals相同,只是matches采用常规字符串作为参数,而equals采用另一个String对象|
| 取代了|替换(旧的,新的)|返回将此字符串中所有oldChar替换为newChar后得到的字符串|
| 全部替换|替换所有字符串变量(旧正则表达式,新)|将此字符串中与给定正则表达式匹配的每个子字符串替换为给定的替换项|
| 劈裂|myString变量拆分(正则表达式)|根据给定正则表达式的匹配项拆分此字符串|
Source

相关问题