Groovy-替换字符串中的${}

Groovy-替换字符串中的${},groovy,replace,escaping,Groovy,Replace,Escaping,我收到这样一个字符串:“代码是${code}。您的货币是${currency}”。 ${…}字符已经是字符串的一部分,而不是变量 我有一个带有键值的映射,我想用以下值替换所有出现的${key}: def myMap = [ 'code' : '123456', 'currency' : 'CHF' ] myMap.each{ fieldValue.replaceAll("${$.key}", it.value) } 预期结果如下:“代码是12345

我收到这样一个字符串:“代码是${code}。您的货币是${currency}”。 ${…}字符已经是字符串的一部分,而不是变量

我有一个带有键值的映射,我想用以下值替换所有出现的${key}:

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()