Java使用POI解析Word文本【.doc和.docx】

本文的解析文本,是指:

  1. 提取所有文字信息
  2. 将文本拆分成一行一行的文字(字符串)
  3. 去除空行

需要的jar包

在这里插入图片描述

程序

注意事项

  1. doc格式和docx格式的解析方法不一样
  2. wordText(也就是整个word文档的文字字符串)按行拆分时String[] lineArr = wordText.split("\r\n|\n\n|\n");,你看我这里面写了\r\n\n\n\n三种拆分形式,因为我拆分的时候,发现doc个换行字符是\r\n,docx的普通换行字符是\n\n,而docx中从表格里解析出来的文字的换行字符是\n所以可能换行字符会不一样,各位自己做的时候可以debug看换行字符是什么
/**
 * 从word文件中解析出文字数据
 * @param file 要解析的word文件
 * @return 文档中的行数据数组
 */
private String[] parseAllTextFromWordFile(File file) {
    //获取word文档中的全部文字数据
    String wordText = "";
    String fileName = file.getName();
    String suffix = fileName.substring(fileName.lastIndexOf('.'));//文件后缀(格式)
    try {//.doc和.docx的word获取方式不一样
        InputStream is = new FileInputStream(file);
        switch (suffix) {
            case ".doc":
                WordExtractor wordExtractor = new WordExtractor(is);
                wordText = wordExtractor.getText();
                is.close();
                break;
            case ".docx":
                OPCPackage opcPackage = POIXMLDocument.openPackage(file.getAbsolutePath());
                POIXMLTextExtractor poixmlTextExtractor = new XWPFWordExtractor(opcPackage);
                wordText = poixmlTextExtractor.getText();
                break;
            default:
                return null;
        }
    } catch (Exception e) {
        e.printStackTrace();
    }

    //将整个文档数据字符串拆分成行数据,删除两头空格,并删除空行
    String[] lineArr = wordText.split("\r\n|\n\n|\n");
    List<String> lineList = new ArrayList<>();
    for (String line : lineArr) {
        if (StringUtils.isNotEmpty(line.trim())) {
            lineList.add(line.trim());
        }
    }
    String[] lines = new String[lineList.size()];
    lineList.toArray(lines);

    return lines;
}

猜你喜欢

转载自blog.csdn.net/qq_43222869/article/details/106835255