java中属性中的动态占位符替换

man*_*ish 23 java properties placeholder

我想在java应用程序中的属性中动态替换占位符.喜欢

 WelcomeMessage=Welcome Mr. {firstName} {lastName} !!!
Run Code Online (Sandbox Code Playgroud)

这些firstName和LastName变量需要动态替换.我们应该使用速度模板引擎吗?或者还有其他开源框架吗?

谢谢,Manish

Cha*_*kar 50

您可以使用Java SE 的MessageFormat类.它可以让你完全按照你的要求去做.

在你的情况下,下面的代码片段必须做到这一点,假设props包含从你的文件加载的所有属性.

MessageFormat.format((String) props.get("WelcomeMessage"), "First", "Last");
Run Code Online (Sandbox Code Playgroud)

请注意,您的属性文件应具有参数索引而不是命名参数,如下所示.

WelcomeMessage=Welcome Mr. {0} {1} !!!
Run Code Online (Sandbox Code Playgroud)


ska*_*man 6

在我看来,速度是相当古老和令人不快的,有更好的方法来做到这一点:

  • StringTemplate是最简单的模板引擎,足以满足您的需求(请参阅此处的语法示例).
  • 如果你已经在使用Spring 3,那么它有PropertyPlaceholderHelper类也可以这样做,但是我不会仅仅使用Spring来获取这一类.


小智 5

一种方法是字符串替换:

WelcomeMessage=Welcome Mr. ${firstName} ${lastName} !!!
Run Code Online (Sandbox Code Playgroud)
Map<String, String> valuesMap = new HashMap<String, String>();
valuesMap.put("firstName", "ram");
valuesMap.put("lastName", "Kumar");
StrSubstitutor sub = new StrSubstitutor(valuesMap);
String message = sub.replace(WelcomeMessage);
Run Code Online (Sandbox Code Playgroud)


Jos*_*dai 0

速度是目前最好的工具。但这取决于您想要用作模板的文件类型。

例如,如果您想使用 MS Word 文档作为模板,那么您必须扩展速度类并编写自己的实现。