2016-05-22 6 views
7

Chcę odczytać ciąg z bazy danych i zastąpić symbol zastępczy, przekształcając go w GString. Czy mogę to zrobić z Eval? Jakieś inne pomysły?Jak przekonwertować ciąg na GString i zastąpić symbol zastępczy w 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 –

Odpowiedz

0

Powinieneś używać podwójnego cytowania ciągów literowych, jeśli chcesz korzystać z uchwytów.

Poniższa powinno działać:

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

assert 'Hello world!' == stringFromDatabase 

Zobacz official Groovy documentation about Strings aby zobaczyć inne sposoby można dokonać tej pracy.

+0

Działa. Ale moja stringFromDatabase jest tworzona przez odczytanie obiektu z bazy danych, co skutkuje łańcuchem: –

+0

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

8

Można użyć ramy szablonu w Groovy, więc robi to rozwiąże problem:

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

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

można znaleźć docs tutaj: http://docs.groovy-lang.org/latest/html/documentation/template-engines.html#_introduction

Klasa GString jest abstrakcyjny, a realizacja GStringImpl od Klasa abstrakcyjna działa na tablicach łańcuchów, które pobiera z fazy analizy wraz z wartościami.

Powiązane problemy