我需要模拟一些电子邮件文本。没什么好看的,只需用真正有价值的东西替换@name@
之类的东西。没有图片,没有花哨的格式等。
你推荐什么java lib?越简单越好。
答案 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)
您可以提前Velocity或Freemarker。我在电子邮件模板引擎中都使用了它们。它们为基本用例提供了简单的语法,但您以后可能会变得相当复杂!
在这两者中,我个人更喜欢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。它通过应用替换过滤器来减少复制任务中的模板。