嘿伙计们!
我在替换由特殊字符组成的字符串时遇到了困难。
所以我有一个以下字符串例如:
亲爱的* | customer_name | *,
感谢您的订单* | order_id | *。
请期待送货* | delivery_date | *
我想要的是用值替换这些动态变量。
我已经完成了这段代码,但它没有正确替换它们:
Map<String, String> structMap = getContectMap();
for (String key : structMap.keySet()) {
if (bodyText.contains(key)) {
bodyText.replaceAll(getVariableKey(key), structMap.get(key));
}
}
private String getVariableKey(Object key) {
return "\\*|" + key + "|\\*";
}
这是我得到的输出:
尊敬的用户|用户|用户,
感谢您的订单1236 | 1236 | 1236。
请期待发货5.12.2017 | 5.12.2017 | 5.12.2017
任何想法我做错了什么?
*编辑* 发现了一个问题。我也应该逃避管道字符(|),现在工作。
答案 0 :(得分:1)
我建议您使用模板引擎,而不是尝试重新发明轮子。
模板引擎可帮助您根据模板和数据生成文档。
有几个很好的Java框架可用于生成文档,我建议您检查以下两个:
修改强>
如果您真的想要使用自己的模板引擎,那么这可以是一个解决方案:
public static void main(String[] args) {
String template = "Dear CUSTOMER_NAME, \n\n"
+ "Thank you for your order ID is ORDER_ID.\n"
+ "Please expect delivery DELIVERY_DATE.";
Date deliveryDate = new Date();
String deliveryDateString = new SimpleDateFormat("dd/MM/yyyy").format(deliveryDate);
Map<String, String> keywords = new HashMap<>();
keywords.put("CUSTOMER_NAME", "Zappee");
keywords.put("ORDER_ID", "123456");
keywords.put("DELIVERY_DATE", deliveryDateString);
for (Map.Entry<String, String> keyword : keywords.entrySet()) {
template = template.replaceAll(keyword.getKey(), keyword.getValue());
}
System.out.println(template);
}
输出:
Dear Zappee,
Thank you for your order ID is 123456.
Please expect delivery 01/12/2017.