Заменить переменные в тексте: предложения?

Я ищу хороший шаблонизатор или небольшой кусок кода для расширения Ant-подобных переменных в строке в Java. Пример:

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

Должен хотя бы поддерживать java.util.Map но что-то, что может обрабатывать бины или рекурсивные поиски или поиски в списке карт / объектов, также будет приветствоваться.

Предложения?

[EDIT] В ответ на TofuBeer: нет вложенности, только допустимые идентификаторы Java в пределах {}, Что-нибудь за пределами ${} должен быть скопирован дословно. $$ должен стать $``. If that's not possible ${dollar} следует расширить до одного $ (так что вы можете выразить 15.00 $).

3 ответа

Решение

StrSubstitutor от Commons Lang делает в основном то, что вы просите

Используйте StringTemplate для реализации 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();
} 

Взгляните на Freemarker и Velocity, оба они являются шаблонными движками

Другие вопросы по тегам