Groovy-替换字符串中的${}
我收到这样一个字符串:“代码是${code}。您的货币是${currency}”。 ${…}字符已经是字符串的一部分,而不是变量 我有一个带有键值的映射,我想用以下值替换所有出现的${key}:Groovy-替换字符串中的${},groovy,replace,escaping,Groovy,Replace,Escaping,我收到这样一个字符串:“代码是${code}。您的货币是${currency}”。 ${…}字符已经是字符串的一部分,而不是变量 我有一个带有键值的映射,我想用以下值替换所有出现的${key}: def myMap = [ 'code' : '123456', 'currency' : 'CHF' ] myMap.each{ fieldValue.replaceAll("${$.key}", it.value) } 预期结果如下:“代码是12345
def myMap = [
'code' : '123456',
'currency' : 'CHF'
]
myMap.each{
fieldValue.replaceAll("${$.key}", it.value)
}
预期结果如下:“代码是123456,您的货币是瑞士法郎”
我被卡住了,因为我不知道如何处理${}字符转义。我可以转义$字符,但不能转义{}。为了达到预期的效果,你有什么想法吗?你需要引用外部的
$
并使用it.key
:“\\${$it.key}”
您也可以在此处使用每个
,因为它用于副作用和replaceAll
不修改字符串(java中的字符串是不可变的)。所以你需要
大概是这样的:
def result = myMap.inject(fieldValue){ acc, kv ->
acc.replaceAll("\\${$kv.key}", kv.value)
}
或者使用regexp:
fieldValue.replaceAll(/\$\{(.+?)\}/, { _, k -> myMap[k] })
您需要引用外部
$
并使用it.key
:“\\\${$it.key}”
您也可以在此处使用每个
,因为它用于副作用和replaceAll
不修改字符串(java中的字符串是不可变的)。所以你需要
大概是这样的:
def result = myMap.inject(fieldValue){ acc, kv ->
acc.replaceAll("\\${$kv.key}", kv.value)
}
或者使用regexp:
fieldValue.replaceAll(/\$\{(.+?)\}/, { _, k -> myMap[k] })
它也适用于闭包和委托策略。您可以在映射的上下文中计算字符串。请参见此示例:
def myMap = [
'code' : '123456',
'currency' : 'CHF'
]
closure = { "The code is ${code}. Your currency is ${currency}" }
closure.delegate = myMap
println closure()
它也适用于闭包和委托策略。您可以在映射的上下文中计算字符串。请参见此示例:
def myMap = [
'code' : '123456',
'currency' : 'CHF'
]
closure = { "The code is ${code}. Your currency is ${currency}" }
closure.delegate = myMap
println closure()