本文已参与「新人创作礼」活动,一起开启掘金创作之路。
在工作中经常会遇到发送短信或者替换模板内容的需求,最开始都是定义好一段话,然后都是用String类提供的replace方法进行内容的替换,但是这样写复用性不强。每次有个新的模板都需要重新写replace方法。因此就想到了正则表达式的用法,正好util包提供了相应的方法。下面就来看看这解方法是怎么应用的把。
package com.wounler.helloword.demo;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/*
* 获取功能:
* 获取下面这个字符串中的占位符
*
*/
public class RegexDemo {
public static void main(String[] args) {
// 定义字符串
String s = "尊敬的${custName}客户,您好,您于${year}年${month}月${day}日申请的贷款已通过审批。";
// 规则
String regex = "\$\{(.*?)\}";
// 把规则编译成模式对象 p: "${(.*?)}" regex: "${(.*?)}"
Pattern p = Pattern.compile(regex);
// 通过模式对象得到匹配器对象
Matcher m = p.matcher(s);
// 调用匹配器对象的功能
// 通过find方法就是查找有没有满足条件的子串
// 注意:一定要先find(),然后才能group()
// IllegalStateException: No match found
//String group()
//返回当前查找而获得的与组匹配的所有子串内容
//String group(int group)
//返回当前查找而获得的与指定的组匹配的子串内容
//Pattern对象中的parentPattern->capturingGroupCount 记录了字串数量
while (m.find()) {
System.out.println(m.group());//输出:${custName} ${year} ${month} ${day}
System.out.println(m.group(1));//输出:custName year month day
}
}
}
以下为实战应用:用了下面的方法真是谁爽谁知道
package com.wounler.helloword.demo;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/*
* 获取功能:
* 消息模板替换
*/
public class RegexDemo {
public static void main(String[] args) {
// 定义字符串
String s = "尊敬的${custName}客户,您好,您于${year}年${month}月${day}日申请的贷款已通过审批。";
RegexDemo regexDemo = new RegexDemo();
Map<String ,String> map = new HashMap<>();
map.put("custName","wounler");
Calendar now = Calendar.getInstance();
map.put("year",String.valueOf(now.get(Calendar.YEAR)));
map.put("month",String.valueOf(now.get(Calendar.MONTH)+1));
map.put("day",String.valueOf(now.get(Calendar.DAY_OF_MONTH)));
String s1 = regexDemo.msgTpltParamsReplace(s, map);
System.out.println(s1);//尊敬的wounler客户,您好,您于2022年8月15日申请的贷款已通过审批。
}
public String msgTpltParamsReplace(String msgTplt, Map<String, String> params){
for (String match : getMatchList(msgTplt)){
if(params.containsKey(match)){
String value = params.get(match);
msgTplt = msgTplt.replace("${" + match + "}",value);
}
}
return msgTplt;
}
public List<String> getMatchList(String msgTplt) {
List<String> list = new ArrayList<>();
// 规则
String regex = "\$\{(.*?)\}";
// 把规则编译成模式对象 p: "${(.*?)}" regex: "${(.*?)}"
Pattern p = Pattern.compile(regex);
// 通过模式对象得到匹配器对象
Matcher m = p.matcher(msgTplt);
// 调用匹配器对象的功能
while (m.find()) {
list.add(m.group(1));
}
return list;
}
}