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

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

WelcomeMessage=Welcome Mr. {firstName} {lastName} !!! 

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

谢谢,Manish

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

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

 MessageFormat.format((String) props.get("WelcomeMessage"), "First", "Last"); 

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

 WelcomeMessage=Welcome Mr. {0} {1} !!! 

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

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

其中一种方式是字符串替换:

 WelcomeMessage=Welcome Mr. ${firstName} ${lastName} !!! 

 Map valuesMap = new HashMap(); valuesMap.put("firstName", "ram"); valuesMap.put("lastName", "Kumar"); StrSubstitutor sub = new StrSubstitutor(valuesMap); String message = sub.replace(WelcomeMessage); 

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

例如,如果要使用MS word docs作为模板,则必须扩展velocity classess并编写自己的实现。

在具有JSF 2的Java Web应用程序中,其工作方式如下:

SRC \主\ web应用\ WEB-INF \面向-config.xml中

 ...  com.mycompany.resources.messages mytext  ... 

SRC \主\资源\ COM \ myCompany的\资源\信息\ mytext.properties

 WelcomeMessage = Welcome Mr. {0} {1} !!! 

的index.xhtml

     

另一种选择是添加没有依赖关系的Apache FreeMarker并将模板定义为:

 Welcome Mr. ${firstName} ${lastName} !!! 

Apache FreeMarker™是一个模板引擎:一个Java库,用于根据模板和更改数据生成文本输出(HTML网页,电子邮件,配置文件,源代码等)。 模板以FreeMarker模板语言(FTL)编写,这是一种简单的专用语言

您可以使用StringTemplateLoader使用String加载模板

您可以创建一个StringTemplateLoader并将每个模板添加到它: