Groovy如何替换字符串中完全匹配的单词

ttcibm8c  于 2023-01-20  发布在  其他
关注(0)|答案(1)|浏览(267)

Groovy如何替换字符串中完全匹配的单词。
我想在Groovy中替换给定字符串中完全匹配的单词。当我尝试时,下面的命令没有得到完全匹配的单词

def str="My Name is Richards and Richardson"
log.info(str)
str=str.replace("Richards","Praveen")
log.info("After"+str)

执行上述操作后的输出
我叫理查兹和理查德森我叫普拉温和普拉温农
我正在寻找输出,如:我叫Praveen和Richardson
我尝试了Java中的边界\b str=str.replace(“\bRichards\b”,“Praveen”),但它不起作用。在Groovy中,看起来\b是一个反斜杠转义序列
有人能帮忙吗

def str="My Name is Richards and Richardson"
log.info(str)
str=str.replace("Richards","Praveen")
log.info("After"+str)

我的名字是Praveen和Richardson

im9ewurl

im9ewurl1#

边界(/b)不适用于String::replace,因为方法参数不接受正则表达式模式,而接受简单的字符串文字。
您有两种选择来获得预期结果:
1.可以使用String::replaceFirst代替String::replace,正如方法名称所示,它只替换第一个出现的Richards子字符串,Richardson保持不变。

str = str.replaceFirst("Richards", "Praveen")

1.您可以使用String::replaceAll来代替String::replace,与String::replace相反,它支持正则表达式,因此您可以使用单词边界标记

str = str.replaceAll("\\bRichards\\b","Praveen")

小心双斜线

此外,根据String::replaceAll文档:
注意,替换字符串中的反斜杠(\)和美元符号($)可能导致结果与将其视为文字替换字符串时的结果不同;请参阅Matcher.replaceAll。如果需要,请使用Matcher.quoteReplacement(java.lang.String)来隐藏这些字符的特殊含义。

相关问题