ApachePOI-Java-:如何使用ApachePOI将包含空行的文本作为单独的段落添加到Word文档中?

ApachePOI-Java-:如何使用ApachePOI将包含空行的文本作为单独的段落添加到Word文档中?,java,javafx,apache-poi,Java,Javafx,Apache Poi,我无法将包含空行的文本作为单独段落添加到word文档中 如果我尝试添加以下包含3个不同段落的文本 这里有一些文字 这里是另一个文本 这里还有一个 我得到的是1。这里有一些文字。2.这里是另一个文本。3.这里还有一个。好像它们是同一段 是否可以使用ApachePOI将包含空行的文本作为单独的段落添加到Word文档中 public static void addingMyParagraphs(XWPFDocument doc, String text) throws InvalidForma

我无法将包含空行的文本作为单独段落添加到word文档中

如果我尝试添加以下包含3个不同段落的文本

  • 这里有一些文字
  • 这里是另一个文本
  • 这里还有一个
  • 我得到的是1。这里有一些文字。2.这里是另一个文本。3.这里还有一个。好像它们是同一段

    是否可以使用ApachePOI将包含空行的文本作为单独的段落添加到Word文档中

        public static void addingMyParagraphs(XWPFDocument doc, String text) throws InvalidFormatException, IOException {
    
            XWPFParagraph p = doc.createParagraph();
            XWPFRun run = p.createRun();
    
            run.setText(text);
            run.setFontFamily("Times new Roman");
        }
    
    --在下面的方法中,MyText变量是一个textArea变量,它是javaFx应用程序的一部分

        public void CreatingDocument() throws IOException, InvalidFormatException {
            String theText = myText.getText();
            addingMyParagraphs(doc, theText);
    
            FileOutputStream output = new FileOutputStream("MyDocument.docx");
            doc.write(output);
            output.close();
        }
    }
    

    您需要将文本拆分为“段落”,并将每个段落分别添加到WORD文档中。这与JavaFX无关

    下面是一个用于模拟输入[JavaFX]
    TextArea
    的文本的示例。代码后面的解释

    import java.io.FileOutputStream;
    导入java.io.IOException;
    导入org.apache.poi.xwpf.usermodel.XWPFDocument;
    导入org.apache.poi.xwpf.usermodel.XWPFParagraph;
    导入org.apache.poi.xwpf.usermodel.XWPFRun;
    公共类PoiWord0{
    公共静态void main(字符串[]args){
    字符串文本=”“”
    1.这里有一些文字。
    2.这里还有一段文字。
    3.这里还有一个。
    """;
    String[]paras=text.split(“(?m)^[\\t]*\\r?\\n”);
    try(XWPFDocument doc=newxwpfdocument();
    FileOutputStream输出=新的FileOutputStream(“MyDocument.docx”)){
    用于(字符串段:第{
    XWPFParagraph p=doc.createParagraph();
    XWPFRun=p.createRun();
    run.setText(para.stripTrailing());
    }
    单据写入(输出);
    }
    捕获(IOXIO异常){
    xIo.printStackTrace();
    }
    }
    }
    

    我假设段落定界符是一条空白行,所以我把文本分割在空白行上。这仍然会在数组的每个元素中保留尾随的换行符。我使用

    stripTrailing()
    删除该换行符

    现在我有了一个段落数组,所以我只需为每个数组元素向[WORD]文档添加一个新段落

    注意,上面的代码是使用JDK15编写的

    用于拆分文本的正则表达式来自题为

    是在Java7中添加的


    是在JDK 11中添加的

    据我所知,您的问题是在
    XWPFDocument
    中添加段落。但是您没有显示任何代码,甚至没有尝试过。如果代码添加了多个段落,则
    Word
    也将显示多个段落。请(为了证明你在追求什么,以及它是如何不按预期工作的)我在问题中添加了添加段落的方法。为了清楚起见,只有在我添加textarea中的任何段落时才会出现问题。如果我在没有使用文本区域的情况下添加它,则段落可以正常工作。您确实阅读了引用的帮助页面,是吗?不知道你为什么不提供它的建议让我来看看。谢谢你的帮助。这太完美了。我按照您的指示进行了调整,效果非常好。非常感谢。这个问题与您提到的Javafx无关,而是与Apache poi有关。我对代码做了以下调整,效果非常好:公共静态void addingMyPages(XWPFDocument doc,String text)抛出InvalidFormatException,IOException{String[]paras=text.split((?m^[\\t]*\\r?\\n);对于(字符串paragraph p=doc.createParagraph();XWPFRun run=p.createRun();run.setText(para.stripTrailing());run.setFontFamily(“Times new Roman”);}