我对Apache POI中的字符串替换有一个小问题。
private static HWPFDocument replaceText(HWPFDocument doc, String findText, String replaceText) {
Map<String, Range> ranges = new HashMap<String, Range>();
ranges.put("COMMENTS", doc.getCommentsRange());
ranges.put("ENDNOTE", doc.getEndnoteRange());
ranges.put("FOOTNOTE", doc.getFootnoteRange());
ranges.put("HEADERSTORY", doc.getHeaderStoryRange());
ranges.put("MAINTEXT", doc.getMainTextboxRange());
ranges.put("OVERALL", doc.getOverallRange());
ranges.put("DEFAULT", doc.getRange());
for (Entry<String, Range> e : ranges.entrySet()) {
Range r = e.getValue();
for (int i = 0; i < r.numSections(); ++i) {
Section s = r.getSection(i);
for (int j = 0; j < s.numParagraphs(); j++) {
Paragraph p = s.getParagraph(j);
for (int k = 0; k < p.numCharacterRuns(); k++) {
CharacterRun run = p.getCharacterRun(k);
String text = run.text();
if (text.contains(findText)) {
System.out.println("OLD:" + run.text());
run.replaceText(findText, replaceText);
System.out.println("NEW:" + run.text());
}
}
}
}
}
return doc;
}
在99%的情况下,这种情况很好,但在一种情况下,它会切断这样的字符: 在我的sysoutput中它看起来是正确的:
OLD:CUSTOMER_ROW1
NEW:Try and Error customer
但在创建的Word文档中,它仅显示为
rror customer
对我而言,看起来替换不会扩大此CharacterRun的大小并切断所有内容(从头开始),因为打印的替换文本的大小等于要替换的文本的大小。
仅供参考:在其他替换案例中,我甚至用一个包含超过500个字符的文本替换了一个10个字符长的图案,并且工作正常。
到目前为止有没有人遇到过这样的问题并且可以帮到我?我正在使用POI 3.17