正则表达式@Link替换

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);

3、参考文献

[1] 字符串replaceall_Java字符串replaceall中的微优化

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值