ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

String replaceAll()踩过的坑。

2021-03-10 23:30:06  阅读:195  来源: 互联网

标签: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. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有