标签:builder1 String endRep replaceAll append regexBuilder log
问题描述
想做一个模板动态替换的功能
//${} 中为类字段名称。可以动态获取值替换到模板
String template = "于${subTime}已转发给${receiverOrgName}${receiverName}(${receiver})";
看起来用String的replaceAll()可以轻松搞定。然而还是太年轻。由于#,$,{都是特殊字符。一开始没有转义,就会报如下的异常
java.util.regex.PatternSyntaxException: Illegal repetition
网上找了半天,都说需要转义。然鹅。我用string 直接转义以及 stringbuilder.append()组合还是会报错。
错误代码
String template = ""; //入参
String o ="" ; //是需要替换进去的子串
StringBuilder regexBuilder = new StringBuilder();
regexBuilder.append("\\$\\{").append(originFieldName).append("}");
log.info("regexBuilder=={}", regexBuilder);
result = template.replaceAll(regexBuilder.toString(), o);
解决办法
试了老半天。都没用。笨办法解决。代码如下:
StringBuilder builder1 = builder;//原始的串
//循环中的逻辑
int startRep = builder1.indexOf("${");
int endRep = builder1.indexOf("}") + 1;
log.info("builder1=={}", builder1);
log.info("startRep=={}", startRep);
log.info("endRep=={}", endRep);
builder1.replace(startRep, endRep, o);
标签:builder1,String,endRep,replaceAll,append,regexBuilder,log 来源: https://blog.csdn.net/qq_32527287/article/details/114649336
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。