Заменить переменные в тексте:Предложения?
-
18-09-2019 - |
Вопрос
Я ищу хороший механизм шаблонов или короткий фрагмент кода для расширения Ant-подобных переменных в строке на Java.Пример:
String result = expand ("${firstName} ${familyName}", map);
Оно должно как минимум поддерживать java.util.Map
но что-то, что может обрабатывать bean-компоненты, рекурсивный поиск или поиск в списке карт/объектов, также будет приветствоваться.
Предложения?
[EDIT] В ответ TofuBeer:Никакой вложенности, только действительные идентификаторы Java внутри {}
.Что-либо за пределами ${}
следует скопировать дословно. $$
должен стать $``. If that's not possible ${dollar}
должен расшириться до одного $
(чтобы вы могли выразить 15.00 $
).
Решение
StrSubstitutor от Коммонс Ланг делает почти то, о чем вы просите
Другие советы
использовать СтрокаШаблон чтобы реализовать 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, они оба являются шаблонизаторами.