【问题标题】:Simple java lib for text templating? [closed]用于文本模板的简单 java lib? [关闭]
【发布时间】:2011-06-02 15:08:06
【问题描述】:

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

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

【问题讨论】:

    标签: java templates text


    【解决方案1】:

    已建议的库的无库替代方案:java.text.MessageFormat

    【讨论】:

      【解决方案2】:

      StringTemplate 是另一种选择。 five-minute introduction 给出了一些基本的例子和语法。

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          【解决方案4】:

          你试过Apache Velocity吗?

          【讨论】:

            【解决方案5】:

            试试 Apache Velocity 或 FreeMarker,它们会很有帮助,对我来说我正在使用 FreeMarker

            【讨论】:

              【解决方案6】:

              自己做很简单:

              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();
                }
              }
              

              你必须稍微打磨一下,但仅此而已。

              【讨论】:

                【解决方案7】:

                同意,Apache 的 Velocity 非常适合嵌入式情况。

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

                【讨论】:

                  猜你喜欢
                  • 2011-04-24
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2012-03-24
                  • 1970-01-01
                  • 1970-01-01
                  • 2011-10-06
                  相关资源
                  最近更新 更多