摸版值${code}替换 正则匹配 摸版值替换 如短信 邮件 等下面已短信为例publicclassSmsTemplateTest{/** * 正则表达式 匹配${值} */privatestaticfinalStringREGEX\\$\\{(.*?)\\};publicstaticvoidmain(String[]args){Stringmsg尊敬的用户${name}您的验证码是${code}5分钟内有效;MapString,StringmapnewHashMap(2);map.put(name,张三);map.put(code,886699);//替换方法Stringresultrender(msg,map);System.out.println(result);// 输出尊敬的用户张三您的验证码是8866995分钟内有效}/** * 短信模板替换 * * param template 短信模板 * param params 填充参数 * return 替换完成的短信内容 * p * matcher.find() 找字符串中任意一处符合正则的片段可循环遍历所有匹配 * matcher.matches() 整串必须完全匹配正则只能判断一次 * / */publicstaticStringrender(Stringtemplate,MapString,Stringparams){if(templatenull||paramsnull){returntemplate;}//编译正则表达式生成Pattern对象PatternpPattern.compile(REGEX);//将正则和待处理字符串绑定生成匹配器MatcherMatchermatcherp.matcher(template);StringBuffersbnewStringBuffer();//循环查找所有 ${xxx}while(matcher.find()){//group(0) 变量名 ${name} / ${code}//group(1) 变量名 name / codeStringkeymatcher.group(1);// 有值就替换无值留空Stringvalparams.getOrDefault(key,);// appendReplacement 自动拼接前面内容替换值matcher.appendReplacement(sb,Matcher.quoteReplacement(val));}// 拼接最后一段剩余文本matcher.appendTail(sb);returnsb.toString();}}