1、简单实现替换
场景:公众号可以发送模板消息,为了给用户发送自定义的消息,需要对消息内容中的特定符号进行替换。
比如:恭喜 n i c k n a m e 抢 到 了 {nickname} 抢到了 nickname抢到了{productName} ,即恭喜XXX用户,抢到了XXX商品。
那么如何对 ${nickname} 和 ${productName} 进行替换呢?
Java 代码实现:
String newContent = content
//替换昵称
.replaceAll("\\$\\{nickname\\}", Matcher.quoteReplacement(nickname))
//替换订单号
.replaceAll("\\$\\{orderSn\\}", orderSn)
//替换商品名
.replaceAll("\\$\\{productName\\}", productName)
//替换创建时间
.replaceAll("\\$\\{createTime\\}", new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(createTime)
//替换金额
.replaceAll("\\$\\{amount\\}", amount);
注意:
(1)$、\ 和 { } 需要进行转义
\在 Java 字符串中表示 \ ,所以 \$ 表示 $ 。
(2)注意替换内容中的特殊字符
调用 str.replaceAll(regex, repl) 形式与以下表达式产生的结果完全相同:
Pattern.compile(regex).matcher(str).replaceAll(repl)
注意,在替代字符串中使用反斜杠 (/) 和美元符号 ($) 与将其视为字面值替代字符串所得的结果可能不同。当repl中存在 $ 或者 / 的时候,会报错。
2、优化替换方法
1、预编译正则模式表达式,并使用它来提高_String.replaceAll_方法的性能
每一次使用String.replaceAll的时候,都会编译输入的正则表达式。具体源代码:
public String replaceAll(String regex, String replacement) {
return Pattern.compile(regex).matcher(this).replaceAll(replacement);
}
2、使用 String.replace(char,char) 来代替 String.replace()
3、对于确定的字符串替换(不需要正则表达式的情况),使用String.replace性能更好。
String newContent = content
//替换昵称
.replace("${nickname}", Matcher.quoteReplacement(nickname))
//替换订单号
.replace("${orderSn}", orderSn)
//替换商品名
.replace("${productName}", productName)
//替换创建时间
.replace("${createTime}", new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(createTime))
//替换金额
.replace("${amount}", amount);