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