使用Matcher.appendReplacement的注意事项

博客介绍了使用Matcher.appendReplacement(String str1, String str2)的注意事项。建议使用Matcher.appendReplacement(String str1, String str2.replaceAll(\////\ \////////\).replaceAll(\//$\ \//////$\)),前者是为添加“/”符号,后者是转义“$”符号。
使用Matcher.appendReplacement(String str1, String str2)时要注意,最好这样用:
       Matcher.appendReplacement(String str1, String str2.replaceAll("////", "////////").replaceAll("//$", "//////$"));

1replaceAll("////", "////////")是为了把"/"符号加上,如果不进行这部处理,"/"符号就会被删除!
2
replaceAll("//$", "//////$")是为了把"$"符号转义,因为"$"后加数字是表示第几组的意思!

private static void processParagraph(XWPFParagraph paragraph, Map<String, Object> map) { // 合并段落中的所有文本 StringBuilder contentBuilder = new StringBuilder(); for (XWPFRun run : paragraph.getRuns()) { contentBuilder.append(run.getText(0)); } String content = contentBuilder.toString(); // 查找并替换占位符 if (content != null && content.contains("${")) { //进入这里面的,已经判断过为${开头的数据,这里再判断下结尾} Pattern pattern = Pattern.compile("\\$\\{([^}]+)\\}"); Matcher matcher = pattern.matcher(content); StringBuffer sb = new StringBuffer(); while (matcher.find()) { String placeholderKey = matcher.group(1); //查询 for (Map.Entry<String, Object> entry : map.entrySet()) { if (entry.getKey().equals(placeholderKey)) { Object replacement = map.get(placeholderKey); matcher.appendReplacement(sb, Matcher.quoteReplacement(replacement.toString())); break; } } } matcher.appendTail(sb); String replacedContent = sb.toString(); // 清空原有内容 for (int i = paragraph.getRuns().size() - 1; i >= 0; i--) { paragraph.removeRun(i); } if (replacedContent != null && !replacedContent.contains("${")) { //内容中没有“${”标识,说明有真实的内容 // 插入新内容 XWPFRun newRun = paragraph.createRun(); //复制原有占位符样式 copyRunStyles(paragraph.getRuns().get(0), newRun); newRun.setText(replacedContent); // newRun.setFontFamily("宋体"); // newRun.setFontSize(11); } // else { // // 没有有效数据 // // 没有有效数据 - 设置红色文字 // XWPFRun newRun = paragraph.createRun(); // newRun.setColor("FF0000"); // 设置红色(十六进制格式) // newRun.setText("待填写"); // } } } 这个java方法,替换word中的占位符中的内容,在原方法里改一下,让替换进去的内容保持原有占位符的样式
05-14
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值