Как лучше всего параметризовать строку - PullRequest
0 голосов
/ 17 сентября 2018

Например, у меня есть:

String templateString = "Hi {{customerName}}, you have successfully ordered a {{itemName}}."
Map<String, String> parameters = new HashMap<>();
parameters.put("customerName", "Bob");
parameters.put("itemName", "sofa");

Желаемый выход: "Hi Bob, you have successfully ordered a sofa."

Каков наилучший (надежный, надежный, экономичный по времени и т. Д.) Способ получить желаемый результат?

Я думал сделать что-то простое:

String output = templateString;
for (Map.Entry<String, String> entry : parameters.entrySet()) {
    output = output.replace("{{" + entry.getKey() + "}}", entry.getValue());
}

Есть ли лучший способ?

Ответы [ 4 ]

0 голосов
/ 18 сентября 2018

Помимо решений, уже предоставленных в других ответах, вы также можете использовать StringSubstitutor из Apache Commons Text .

Пример из https://commons.apache.org/proper/commons-text/javadocs/api-release/org/apache/commons/text/StringSubstitutor.html: -

 Map valuesMap = HashMap();
 valuesMap.put("animal", "quick brown fox");
 valuesMap.put("target", "lazy dog");
 String templateString = "The ${animal} jumps over the ${target}.";
 StringSubstitutor sub = new StringSubstitutor(valuesMap);
 String resolvedString = sub.replace(templateString);
0 голосов
/ 17 сентября 2018

Другой способ - использовать Mustache.java, документы

String templateString = "Hi {{customerName}}, you have successfully ordered a {{itemName}}.";
Map<String, String> parameters = new HashMap<>();
parameters.put("customerName", "Bob");
parameters.put("itemName", "sofa");

Writer writer = new StringWriter();
MustacheFactory mf = new DefaultMustacheFactory();
Mustache mustache = mf.compile(new StringReader(templateString), "example");
mustache.execute(writer, parameters);
writer.flush();
System.out.println(writer.toString());
0 голосов
/ 17 сентября 2018

Было бы лучше получить значения, используя ключи в карте

            String output = templateString;
            output = output.replace("{{customerName}}",parameters.get("customerName"));
            output = output.replace("{{itemName}}",parameters.get("itemName"));
0 голосов
/ 17 сентября 2018

Зависит от того, насколько сложна система шаблонов вам нужна. Там уже много.

Два примера:

...