2016-05-22 11 views
7

Voglio leggere una stringa dal database e sostituire il segnaposto convertendolo in un GString. Posso farlo con Eval? Altre idee?Come convertire String in GString e sostituire segnaposto in Groovy?

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

assert 'Hello world!'== TODO 
+0

http://stackoverflow.com/questions/36805214/valore-valutazione-di-espressione-in-espressione-in-groovy/36806883#36806883 –

risposta

0

si dovrebbe utilizzare doppia stringa tra virgolette letterale, se si desidera utilizzare segnaposto.

Il seguente dovrebbe funzionare:

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

assert 'Hello world!' == stringFromDatabase 

Vedere il official Groovy documentation about Strings per vedere altri modi si può fare questo lavoro.

+0

Sta funzionando. Ma il mio stringFromDatabase viene creato leggendo un oggetto dal database che risulta in una stringa: –

+0

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

8

È possibile utilizzare il quadro modello in Groovy, così facendo il problema viene risolto:

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

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

È possibile trovare la documentazione qui: http://docs.groovy-lang.org/latest/html/documentation/template-engines.html#_introduction

La classe GString è astratta, e l'implementazione GStringImpl di la classe astratta lavora sugli array di stringhe, che ottiene dalla fase di analisi insieme ai valori.