本文的解析文本,是指:
- 提取所有文字信息
- 将文本拆分成一行一行的文字(字符串)
- 去除空行
需要的jar包
程序
注意事项
- doc格式和docx格式的解析方法不一样
- 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;
}