2

我的字符串看起来像这样:“您可以在 [开始日期 + 30] 之前使用促销活动”。我需要[ Start Date + 30]用实际日期替换占位符 - 这是销售的开始日期加上 30 天(或任何其他数字)。[Start Date]也可以单独出现而无需添加数字。此外,占位符内的任何额外空格都应该被忽略,并且不会导致替换失败。

在 Java 中做到这一点的最佳方法是什么?我正在考虑查找占位符的正则表达式,但不确定如何进行解析部分。如果只是 [Start Date] 我会使用该String.replaceAll()方法,但我不能使用它,因为我需要解析表达式并添加天数。

4

1 回答 1

3

你应该使用StringBufferand Matcher.appendReplacementandMatcher.appendTail

这是一个完整的例子:

String msg = "Hello [Start Date + 30] world [ Start Date ].";
StringBuffer sb = new StringBuffer();

Matcher m = Pattern.compile("\\[(.*?)\\]").matcher(msg);

while (m.find()) {

    // What to replace
    String toReplace = m.group(1);

    // New value to insert
    int toInsert = 1000;

    // Parse toReplace (you probably want to do something better :)
    String[] parts = toReplace.split("\\+");
    if (parts.length > 1)
        toInsert += Integer.parseInt(parts[1].trim());

    // Append replaced match.
    m.appendReplacement(sb, "" + toInsert);
}
m.appendTail(sb);

System.out.println(sb);

输出:

Hello 1030 world 1000.
于 2012-05-02T11:01:30.847 回答