2009-12-09 8 views
2

Je suis à la recherche d'un moteur de template sympa ou d'un petit morceau de code pour développer des variables de type Ant dans une chaîne en Java. Exemple:Remplacer les variables dans le texte: Suggestions?

String result = expand ("${firstName} ${familyName}", map); 

Il faut au moins le soutien java.util.Map mais quelque chose qui peut gérer des haricots ou des récursives ou des recherches dans une liste des recherches de cartes/objets serait les bienvenus.

Suggestions?

[EDIT] En réponse à TofuBeer: Aucune imbrication, seulement des identifiants Java valides dans le {}. Tout ce qui est en dehors de ${} doit être copié textuellement. $$ devrait devenir $``. If that's not possible ${dollar} devrait se développer à un seul $ (de sorte que vous pouvez exprimer 15.00 $).

+0

Est-ce que $, {ou} peuvent apparaître dans un $ {....}? La chaîne à développer aura-t-elle $ {....} séparés par des espaces? La chaîne à développer aura-t-elle des caractères autres que des espaces et $ {....}? – TofuBeer

+0

@TofuBeer: Aucune imbrication, seulement des identifiants Java valides dans le {}. Tout ce qui est en dehors de $ {} doit être copié textuellement. $$ devrait devenir $. Si ce n'est pas possible, $ {dollar} devrait s'étendre à un seul "$". –

Répondre

5

StrSubstitutor de Commons Lang fait à peu près ce que vous demandez

+0

+1 Excellent, puisque j'ai déjà lang dans mon chemin de construction! –

1

utilisation StringTemplate afin de mettre en œuvre expand:

void expand(String template, Map<String,String> map) { 
    StringTemplate st = new StringTemplate(template); 

    for (Map.Entry<String, String> attribute : map) { 
     st.setAttribute(attribute.getKey(), attribute.getValue()); 
    } 

    return st.toString(); 
} 
+0

Oui, StringTemplate est un moteur très bon et simple mais flexible. J'étais sur le point de poster cette réponse quand j'ai cliqué sur la question ... Greetz, GHad – GHad

0

Jetez un oeil à Freemarker och vitesse, tous les deux sont des moteurs modèle

Questions connexes