如何使用Java从文件中编辑模板文档(表单字母)?

时间:2008-11-27 02:20:48

标签: java templates

我第一次玩Java,需要能够替换模板中的一些单词。示例模板 -

“亲爱的PUT_THEIR_NAME_HERE,

我正联系你..... bla bla bla

此致

PUT_COMPANY_NAME_HERE“

最简单的方法(最好是使用标准库)制作此模板文件的副本并在正确的位置添加正确的单词然后将其保存到文件系统?我必须做很多这样简单的模板,这样一种可以轻松复制的方法会很好。

我也是使用Rhino通过JavaScript访问Java,不确定这是否有所不同。

此致

克里斯

7 个答案:

答案 0 :(得分:12)

您正在寻找java.text.MessageFormat:

以下是一些使用示例(来自JavaDoc):

 Object[] arguments = {
     new Integer(7),
     new Date(System.currentTimeMillis()),
     "a disturbance in the Force"
 };

 String result = MessageFormat.format(
     "At {1,time} on {1,date}, there was {2} on planet {0,number,integer}.",
     arguments);

 output: At 12:30 PM on Jul 3, 2053, there was a disturbance
           in the Force on planet 7.

答案 1 :(得分:5)

对于高级功能(如循环),您可能需要使用Apache VelocityFreeMarker

答案 2 :(得分:2)

非常简单的方式:

当然不是防弹。

C:\oreyes\samples\java\replace>type Simplistic.java
public class Simplistic{
    public static void main( String [] args ) {
        String template = "Dear _NAME_HERE_. I'm glad you...";
        System.out.println( template.replaceAll("_NAME_HERE_","Oscar Reyes"));
    }
}

C:\oreyes\samples\java\replace>java Simplistic
Dear Oscar Reyes. I'm glad you...

如果您想进一步调查

,这是该方法的正式文档

http://java.sun.com/javase/6/docs/api/java/lang/String.html#replaceAll(java.lang.String,java.lang.String)

我很高兴听到你在学习java!

答案 3 :(得分:1)

当前评分最高的帖子是准确的,但不是在Java 6中使用API​​的最简洁的方法。无需创建参数数组或显式选中整数,而新的Date()默认使用当前时间:

String result = MessageFormat.format(“{1,time} on {1,date},{{0,number,integer}上有{2}。”,7,new Date(),“a力量的干扰“);

提供一些提示,使您的代码更易读,更易于维护。

答案 4 :(得分:0)

我在10年前将应用程序移植到java时为此编写了一个类:

http://github.com/dustin/spyjar/tree/master/src/java/net/spy/util/SpyToker.java

答案 5 :(得分:0)

您可以使用StringSubstitutor类的commons-lang库

答案 6 :(得分:-1)

嗯,最简单的方法是将文件读入字符串,执行replaceAll(对于要替换的每个单词执行一次),然后将结果写入新文件。这不是最有效的方法,但它对于简单的任务非常有效。