问题描述
想做一个模板动态替换的功能
//${} 中为类字段名称。可以动态获取值替换到模板
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);