String replaceAll()踩过的坑。

问题描述

想做一个模板动态替换的功能

//${} 中为类字段名称。可以动态获取值替换到模板
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);
上一篇:一行代码搞定数字格式化输出 (java正则)


下一篇:01、url化