如何在Groovy多行字符串中使用字符串插值?

时间:2016-09-27 09:33:06

标签: groovy string-interpolation

在Groovy中,我有一个多行字符串,用'''定义,我需要使用插值来替换其他一些变量。

尽管我付出了很多努力,但我无法让它发挥作用 - 我认为我需要逃避一些我缺失的东西。

以下是一些示例代码:

def cretanFood = "Dakos" 
def mexicanFood = "Tacos"
def bestRestaurant = ''' 
${mexicanFood} & ${cretanFood}
'''
print bestRestaurant

目前,这输出:

${mexicanFood} & ${cretanFood}

虽然我显然希望:

Tacos & Dakos 

(注意 - 我不想连接字符串)

3 个答案:

答案 0 :(得分:35)

而不是使用''' GStringmulti-line string使用"""

def cretanFood     = "Dakos"  
def mexicanFood    = "Tacos"
def bestRestaurant = """${mexicanFood} & ${cretanFood}"""
print bestRestaurant​
GString中附带的

'''将无法解析placeholder - $。您可以在标题字符串字符串汇总表块下的Groovy Documentation中找到更多详细信息。

答案 1 :(得分:30)

在Groovy中,单引号用于创建不可变的字符串,就像Java使用双引号一样。

当您在Groovy中使用双引号时,您向运行时指示您打算创建可变String或Groovy String(简称GString)。您可以对可变字符串使用变量插值,也可以将其保留为常规纯Java字符串。

此行为扩展到多行String版本;使用三重单引号创建一个不可变的多行字符串,而三重双引号创建一个Groovy字符串。

答案 2 :(得分:0)

将变量添加到三重引号中,然后将它们与内容连接起来也是一个好主意。 对于引号中包含复杂内容的情况,类似这样:

def bestRestaurant = mexicanFood + """ & """ + cretanFood

由于您的情况很简单,因此也应该这样做:

def bestRestaurant = mexicanFood + " & " + cretanFood