我正在尝试从PDF文件中读取文本并拆分每个段落并将其放入ArrayList并打印ArrayList的元素但我没有输出
String path = "E:\\test.pdf";
PDFTextStripper pdfStripper = null;
PDDocument pdDoc = null;
COSDocument cosDoc = null;
File file = new File(path);
PDFParser parser = new PDFParser(new FileInputStream(file));
parser.parse();
cosDoc = parser.getDocument();
pdfStripper = new PDFTextStripper();
pdDoc = new PDDocument(cosDoc);
pdfStripper.setStartPage(1);
pdfStripper.setEndPage(1);
String page = pdfStripper.getText(pdDoc);
String[] paragraph = page.split("\n");
ArrayList<String> ramy = new ArrayList<>();
String p = "";
for (String x : paragraph) {
if ((x.endsWith("\\.")) || (x.endsWith("\\." + "\\s+"))) {
p += x;
ramy.add(p);
p = "";
} else {
p += x;
}
}
for (String x : ramy) {
System.out.print(x + "\n\n");
}
注意:我使用NetBeans 8.0.2,Windows 8.1和pdfbox库从pdf文件中读取。
答案 0 :(得分:0)
您遇到的最严重的错误是您使用endsWith()
拨打"\\."
,这是两个字符;一个字面反斜杠和一个文字点(不一个转义点)和"\\.\\s+"
(再次是所有文字字符)。很明显,你(错误地)认为该方法接受正则表达式,但它没有。
假设您的逻辑是合理的,请更改您的测试以使用基于正则表达式的测试:
if (x.matches(".*\\.\\s*"))
此测试将您的代码意图合并为一个测试。
请注意,您不需要使用$
结束正则表达式,因为matches()
必须与整个字符串匹配才能返回true
,因此{{在模式的开头/结尾,1}}和^
隐含。