问题 如何将String转换为GString并替换Groovy中的占位符?


我想从数据库中读取一个String,并通过将其转换为GString来替换占位符。我可以用Eval做到这一点吗?还有其他想法吗?

String stringFromDatabase = 'Hello ${name}!'
String name = 'world'

assert 'Hello world!'== TODO

10030
2018-05-22 20:04


起源

stackoverflow.com/questions/36805214/... - Emmanuel Rosa


答案:


您可以在Groovy中使用Template框架,因此这样做可以解决您的问题:

String stringFromDatabase = 'Hello ${name}!'
String name = 'world'

def engine = new groovy.text.SimpleTemplateEngine()
assert 'Hello world!'== engine.createTemplate(stringFromDatabase).make([name:name]).toString()

你可以在这里找到文档: http://docs.groovy-lang.org/latest/html/documentation/template-engines.html#_introduction

GString类是抽象的,抽象类的GStringImpl实现在字符串数组上工作,它从解析阶段和值中获得。


11
2018-05-22 22:38





如果要使用占位符,则应使用双引号字符串文字。

以下应该有效:

String name = 'world'
String stringFromDatabase = "Hello ${name}!" //use double quotes

assert 'Hello world!' == stringFromDatabase

关于字符串的官方Groovy文档 看看你可以通过其他方式做到这一点。


1
2018-05-22 20:12



这是工作。但我的stringFromDatabase是通过从数据库中读取一个对象而创建的,该对象产生一个String: - J.T.
伪代码: def templateFromDatabase = Template.get(123); def stringFromDatabase = templateFromDatabase.source; assert stringFromDatabase instanceof String; // true ... TODO - J.T.


我解决了这个问题 EVAL

String stringFromDatabase = 'Hello ${name}!'
String name = 'world'

assert 'Hello world!' == Eval.me('name', name, '"' + stringFromDatabase + '"')

1
2018-05-07 20:27