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
1条答案
按热度按时间im9ewurl1#
边界(
/b
)不适用于String::replace
,因为方法参数不接受正则表达式模式,而接受简单的字符串文字。您有两种选择来获得预期结果:
1.可以使用
String::replaceFirst
代替String::replace
,正如方法名称所示,它只替换第一个出现的Richards
子字符串,Richardson
保持不变。1.您可以使用
String::replaceAll
来代替String::replace
,与String::replace
相反,它支持正则表达式,因此您可以使用单词边界标记小心双斜线
此外,根据
String::replaceAll
文档:注意,替换字符串中的反斜杠(
\
)和美元符号($
)可能导致结果与将其视为文字替换字符串时的结果不同;请参阅Matcher.replaceAll
。如果需要,请使用Matcher.quoteReplacement(java.lang.String)
来隐藏这些字符的特殊含义。