简单的java lib文本模板?

时间:2011-06-02 15:08:06

标签: java templates text

我需要模拟一些电子邮件文本。没什么好看的,只需用真正有价值的东西替换@name@之类的东西。没有图片,没有花哨的格式等。

你推荐什么java lib?越简单越好。

7 个答案:

答案 0 :(得分:12)

已建议使用的库的替代库:java.text.MessageFormat

答案 1 :(得分:12)

StringTemplate是另一种选择。 five-minute introduction提供了一些基本示例和语法。

StringTemplate hello = new StringTemplate("Hello, $name$",
                                          DefaultTemplateLexer.class);
hello.setAttribute("name", "World");
System.out.println(hello.toString());

答案 2 :(得分:6)

您可以提前VelocityFreemarker。我在电子邮件模板引擎中都使用了它们。它们为基本用例提供了简单的语法,但您以后可能会变得相当复杂!

在这两者中,我个人更喜欢Freemarker,因为他们提供了各种不同的内置功能,使格式化数字和文本变得非常简单。

答案 3 :(得分:3)

自己动手很简单:

public class Substitution {

  public static void main(String[] args) throws Exception {
    String a = "aaaa@bbb@ccc";

    // This can be easiliy FileReader or any Reader
    Reader sr = new StringReader(a);

    // This can be any Writer (ie FileWriter)
    Writer wr = new StringWriter();

    for (;;) {
      int c = sr.read();
      if (c == -1) { //EOF
        break;
      }
      if (c == '@') {
        String var = readVariable(sr);
        String val = getValue(var);
        wr.append(val);
      }
      else {
        wr.write(c);
      }
    }
  }

  /**
   * This finds the value from Map, or somewhere
   */
  private static String getValue(String var)  {
    return null;
  }

  private static String readVariable(Reader sr)throws Exception {
    StringBuilder nameSB = new StringBuilder();
    for (;;) {
      int c = sr.read();
      if (c == -1) {
        throw new IllegalStateException("premature EOF.");
      }
      if (c == '@') {
        break;
      }
      nameSB.append((char)c);
    }
    return nameSB.toString();
  }
}

你必须稍微改进一下,但就是这样。

答案 4 :(得分:2)

您是否尝试过Apache Velocity

答案 5 :(得分:2)

尝试使用Apache Velocity或FreeMarker,它们对我有帮助,我使用的是FreeMarker

答案 6 :(得分:0)

同意,Apache的Velocity是一个很好的嵌入式情况调用。

如果您想要一个独立的产品,您也可以使用Apache的Ant。它通过应用替换过滤器来减少复制任务中的模板。