【问题标题】:Replace special characters with dynamic content [closed]用动态内容替换特殊字符[关闭]
【发布时间】:2017-12-01 09:45:07
【问题描述】:

大家好!

我在替换由特殊字符组成的字符串时遇到了困难。

所以我有以下字符串,例如:

亲爱的*|客户姓名|*,

感谢您的订单*|order_id|*。

请期待交货 *|delivery_date|*

我想做的是用值替换那些动态变量。

我已经完成了这段代码的 sn-p,但它没有正确替换它们:

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

任何想法我做错了什么?

*编辑* 发现了一个问题。我也应该转义管道字符(|),现在可以使用。

【问题讨论】:

  • | 是一个需要转义的元字符。投票结束是一个错字。

标签: java regex string replace replaceall


【解决方案1】:

我建议您使用模板引擎,而不是尝试重新发明轮子。

模板引擎可帮助您根据模板和数据生成文档。

有几个很好的Java框架可以用来生成文档,我建议你检查以下两个:

  • Apache Velocity:易于使用,拥有良好的文档和社区
  • Jasper Reports:用这个工具可以生成TXT、PDF、DOC、EXCEL、HTML等文档,它有一个非常好的模板编辑器应用。

编辑

如果您真的想使用自己的模板引擎,那么这可能是一个解决方案:

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.

【讨论】:

  • 感谢您的建议!我会使用模板引擎,但问题是我们试图在不同的传出通道中使用相同的变量名和格式。 Mailchimp/Mandrill 使用这种 *|var_name|* 格式,我们也想用它来发送 SMS。当程序的不同部分具有相同的格式时,用户可以更轻松地设置自己的动态内容。
  • 我更新了我的帖子。请检查一下。
  • 感谢您的回复。我明白你的意思,但这仍然不能解决我的情况。当我们的客户制作他们的 Mandrill 电子邮件模板时,他们必须使用以下格式的动态变量:*|variable|*。这就是 Mandrill 支持生成动态内容的方式。我们希望在我们的程序中使用相同的格式来生成 SMS 文本,因此它们没有两种不同的方法来生成相似的内容。您的建议将使我的生活更轻松,但不幸的是我无法使用它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-03
  • 2019-09-23
  • 1970-01-01
  • 1970-01-01
  • 2011-12-28
相关资源
最近更新 更多