替换docx文件里面的 ${} 字符串
public class Main { public static void main(String[] args) throws Exception { String template = "C:\\Users\\lzh\\Desktop\\模板.docx"; String outSrc = "C:\\Users\\lzh\\Desktop\\简历.docx"; var is = new FileInputStream(template); var os = new FileOutputStream(outSrc); editDocx(os, is, xml -> { Map<String,String> map = new HashMap<>(); map.put("${name}", "李**"); map.put("${sex}", "男"); map.put("${age}", "21"); Pattern p = Pattern.compile("(\\$\\{)([\\w]+)(\\})"); Matcher m = p.matcher(xml); StringBuffer sb = new StringBuffer(); while (m.find()) { String group = m.group(); m.appendReplacement(sb, map.get(group)); } m.appendTail(sb); xml = sb.toString(); return xml; }); } public static void editDocx(OutputStream bos,InputStream is, Process process){ ZipInputStream zin = new ZipInputStream(is); ZipOutputStream zos = new ZipOutputStream(bos); try { ZipEntry entry; while((entry = zin.getNextEntry()) != null) { //把输入流的文件传到输出流中 如果是word/document.xml由我们输入 zos.putNextEntry(new ZipEntry(entry.getName())); if("word/document.xml".equals(entry.getName())){ String xml = new BufferedReader(new InputStreamReader(zin)).lines().collect(Collectors.joining(System.lineSeparator())); xml = process.process(xml); ByteArrayInputStream byteIn = new ByteArrayInputStream(xml.getBytes()); int c; while ((c = byteIn.read()) != -1) { zos.write(c); } byteIn.close(); }else { int c; while ((c = zin.read()) != -1) { zos.write(c); } } } } catch (IOException e) { e.printStackTrace(); } finally { try { zos.close(); zin.closeEntry(); zin.close(); } catch (IOException e) { e.printStackTrace(); } } } } interface Process { String process(String xml); }
到此这篇关于java 替换docx文件中的字符串方法实现的文章就介绍到这了,更多相关java 替换docx字符串内容请搜索小牛知识库以前的文章或继续浏览下面的相关文章希望大家以后多多支持小牛知识库!
问题内容: 我有一个以字符串形式传递的句子,我正在对单词“ and”进行替换,我想用“”替换它。而且它不是用空格替换“和”一词。以下是我的逻辑示例。而当我调试此逻辑时,逻辑确实落入了句子。 这里有我想念的东西吗? 问题答案: 而当我调试此逻辑时,逻辑确实落入了句子。 是的,然后你放弃返回值。 Java中的字符串是不可变的-当你调用时,它不会更改现有字符串的内容-它会返回经过修改的新字符串。所以你要
问题内容: 我正在寻找一种替换文件中的字符串而不将整个文件读入内存的方法。通常我会使用Reader和Writer,例如以下内容: 但是,我想就地进行替换,并且不认为可以同时在同一文件上打开Reader和Writer。另外,我正在使用Java 1.4,因此无法访问NIO,扫描仪等。 谢谢唐 问题答案: 通常无法对文件进行“就地”替换,除非替换的长度与原始长度完全相同。否则,文件将需要增大,从而将所有
我正在用apache-poi读取一个docx文件。在wordfile中,我需要替换的每个键等于${key}。当这个键在段落中时,我可以,但我有一种情况,我的键在docx的then表中,因此,我需要迭代这个键位置的数组值,例如:
问题内容: 我正在编写一个小型JAVA程序,该程序: 将文本作为字符串 需要2个字符数组 我试图做的事情听起来像是“查找并替换”,但是并不相同,因此我认为清除它很重要。 无论如何,我想获取此文本,查找第一个数组中的任何字符是否与文本中的字符匹配,如果是,则将其替换为第二个字符数组中的匹配字符(根据索引)。 我将举一个例子来说明:假设我的文本(字符串)是:“ java很棒!”;我有2个数组(char
我有一个作为字符串传入的句子,我正在对单词“and”进行替换,我想用“”替换它。它并没有用空白代替“和”。下面是我的逻辑示例。当我调试这个的时候,逻辑就落在句子里了。代替 这里有我遗漏的东西吗。
问题内容: 我有一个名为log.txt的文本文件,它具有以下数据 第一个逗号之前的数字是指定每个项目的索引。 我想做的是读取文件,然后将给定行中字符串的一部分(例如textFiles / a.txt)替换为另一值(例如something / bob.txt)。 这就是我到目前为止 问题答案: 一种方法是使用: 您还可以使用正则表达式,或查找搜索字符串在一行中的何处。
问题内容: 我目前有一个包含字符A,B和C的字符串,例如,该字符串看起来像 其他不包含A,B或CI的随机变量想分别用“ A”,“ B”和“ C”替换A,B和C,这是我目前正在做的最好方法: 问题答案: 如果A,B和C是完全相同的单个字符,cletus的答案就可以正常工作,但是如果它们可以是更长的字符串,而您只是出于示例目的将它们称为A,B和C,则cletus的答案就可以。如果它们是更长的字符串,则
问题内容: 我想在编译代码之前替换Config.java文件中的几行。我所能找到的就是在复制过程中通过过滤器解析文件。一旦我必须将其复制,就必须将其保存在某处- 这就是我寻求解决方案的原因:在替换行时复制到临时位置>删除原始文件>将重复的文件复制回到原始位置>删除临时文件。有更好的解决方案吗? 问题答案: 也许您应该尝试使用类似ant的replaceregexp的方法: 此任务将用替换所有的出现。