使用`Replace()`方法不会替换Apache POI中的文本

时间:2014-09-24 18:19:54

标签: java apache replace io apache-poi

这是我的代码:

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.usermodel.Range;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;


public class POI {

    public POI() throws IOException, InvalidFormatException
    {

        XWPFDocument doc = new XWPFDocument(OPCPackage.open("input.docx"));
        for (XWPFParagraph p : doc.getParagraphs()) {
            for (XWPFRun r : p.getRuns()) {
                String text = r.getText(0);

                System.out.println(text);
                if (text.contains("needle")) 
                {
                    text = text.replace("needle", "haystack");

                    r.setText(text);
                    System.out.println(text);
                    }
                }
            }
        doc.write(new FileOutputStream("output.docx"));


    }


}

此代码旨在替换.docx文档中的文本。我对该程序的输入是input.docx,它包含以下数据

needle
game
system

我的输出为output.docx,其中包含以下数据

needlehaystack
game
system

你可以看到差异。而不是用needle“替换”单词haystack,而只是在haystack旁边添加了needle

我不知道我在这里做错了什么。如何正确替换.docx个文件中的文字?

2 个答案:

答案 0 :(得分:1)

绝对没有经验,但是对称,它应该是:

r.setText(text, 0);

答案 1 :(得分:0)

尝试使用text.replace("needle", "haystack");

replaceAll使用正则表达式,“needle”不是正则表达式。