2016-05-22 2 views
7

Я хочу прочитать строку из базы данных и заменить местозаполнитель, переведя его в GString. Могу ли я сделать это с Eval? Любые другие идеи?Как преобразовать String в GString и заменить место в Groovy?

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

assert 'Hello world!'== TODO 
+0

http://stackoverflow.com/questions/36805214/evaluating-value-of-an-expression-as-expression-in-groovy/36806883#36806883 –

ответ

0

Вы должны использовать строковый литерал с двойными кавычками, если вы хотите использовать держатели мест.

должно работать:

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

assert 'Hello world!' == stringFromDatabase 

См official Groovy documentation about Strings, чтобы увидеть другие способы, которые вы можете сделать эту работу.

+0

Работает. Но моя stringFromDatabase создается путем чтения объекта из базы данных, результатом чего является String: –

+0

Pseudocode: 'def templateFromDatabase = Template.get (123); def stringFromDatabase = templateFromDatabase.source; assert stringFromDatabase instanceof String; // true ... TODO' –

8

Вы можете использовать рамки шаблонов в 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 из абстрактный класс работает с массивами строк, которые он получает от фазы анализа наряду со значениями.

Смежные вопросы