我想从数据库中读取一个字符串并使用GString将其占位符替换。我可以用Eval实现吗?还有其他的想法吗?
String stringFromDatabase = 'Hello ${name}!'
String name = 'world'
assert 'Hello world!'== TODO
我想从数据库中读取一个字符串并使用GString将其占位符替换。我可以用Eval实现吗?还有其他的想法吗?
String stringFromDatabase = 'Hello ${name}!'
String name = 'world'
assert 'Hello world!'== TODO
您可以在Groovy中使用模板框架,因此这样做可以解决您的问题:
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实现作用于字符串数组,这些数组与值一起从解析阶段获取。
String stringFromDatabase = 'Hello ${name}!'
String name = 'world'
assert 'Hello world!' == Eval.me('name', name, '"' + stringFromDatabase + '"')
String stringFromDatabase = 'Hello ${name}!'
// variables w/o type or def keyword end up in this.binding.variables
name = 'world'
def engine = new groovy.text.SimpleTemplateEngine()
assert 'Hello world!'== engine.createTemplate(stringFromDatabase).make(this.binding.variables).toString()
注意:可以替换的变量没有类型或def关键字。
如果你想使用占位符,应该使用双引号字符串字面量。
以下代码应该可以正常工作:
String name = 'world'
String stringFromDatabase = "Hello ${name}!" //use double quotes
assert 'Hello world!' == stringFromDatabase
请查看Groovy官方文档关于字符串,以了解其他使其工作的方法。
def templateFromDatabase = Template.get(123); def stringFromDatabase = templateFromDatabase.source; assert stringFromDatabase instanceof String; // true ... TODO
- J.T.