有没有办法在变量中声明Groovy字符串格式?

有没有办法在变量中声明Groovy字符串格式?,groovy,Groovy,我目前有一个固定的资产管理代码格式,它使用Groovy字符串格式,使用美元符号: def code = "ITN${departmentNumber}${randomString}" 这将生成如下代码: ITN120AHKXNMUHKL 但是,我有一个新的要求,即代码格式必须是可定制的。我希望通过允许用户设置自定义格式字符串来公开此功能,例如: OCP${departmentNumber}XI${randomString} 平移-${randomString} 这将输出:

我目前有一个固定的资产管理代码格式,它使用Groovy字符串格式,使用美元符号:

def code = "ITN${departmentNumber}${randomString}"
这将生成如下代码:

ITN120AHKXNMUHKL

但是,我有一个新的要求,即代码格式必须是可定制的。我希望通过允许用户设置自定义格式字符串来公开此功能,例如:

OCP${departmentNumber}XI${randomString}

平移-${randomString}

这将输出:

OCP125XIBQHNKLAPICH

PAN-XJKLBPJKLXHNJ

然后哪个Groovy将解释并替换为适当的变量值。这是可能的,还是我必须手动解析占位符并手动处理字符串。替换?

我认为这符合要求:

deptNum = "C001"
randomStr = "wot"

def code = "ITN${deptNum}${->randomStr}"

assert code == "ITNC001wot"

randomStr = "qwop"

assert code == "ITNC001qwop"
为了

def password=“30+”
def authRequestBody=“”
support@soft.com
${password}
"""

我认为原始海报希望使用变量作为格式字符串。答案是,只有当格式为字符串文字时,字符串插值才有效。似乎必须在编译时将其转换为更低级的
String.format
code。我最终使用了
sprintf

baseUrl是包含
http://example.com/foo/%s/%s
从属性文件加载

def operation = "tickle"
def target = "dog"
def url = sprintf(baseUrl, operation, target)

url
===> http://example.com/foo/tickle/dog

我相信在这种情况下,您不需要使用GString的惰性求值,java的正常
String.format()
将实现以下功能:

def format = 'ITN%sX%s'
def code = { def departmentNumber, def randomString -> String.format(format, departmentNumber, randomString) }
assert code('120AHK', 'NMUHKL') == 'ITN120AHKXNMUHKL'
format = 'OCP%sXI%s'
assert code('120AHK', 'NMUHKL') == 'OCP120AHKXINMUHKL'

希望这能有所帮助。

我可能不太清楚这个问题,但您的要求可以在Groovy中实现。你能用一个示例脚本试试吗?我想你会在这个示例上得到答案。我想他希望“用户”输入一个GString,然后对其进行计算。为什么不使用
String.format()
,或者
MessageFormat.format()
,让用户选择模式呢?
def format = 'ITN%sX%s'
def code = { def departmentNumber, def randomString -> String.format(format, departmentNumber, randomString) }
assert code('120AHK', 'NMUHKL') == 'ITN120AHKXNMUHKL'
format = 'OCP%sXI%s'
assert code('120AHK', 'NMUHKL') == 'OCP120AHKXINMUHKL'