我正在尝试从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 + "nn");
}
注意:我使用NetBeans 8.0.2, windows 8.1和pdfbox库从pdf文件中读取。
最严重的错误是您使用"\."
调用endsWith()
,这是两个字符;一个文字反斜杠和一个文字点(不是转义点),再加上"\.\s+"
(同样都是文字字符)。很明显,您(错误地)认为该方法接受正则表达式,而实际上不是。
假设您的逻辑是合理的,将测试更改为使用基于正则表达式的测试:
if (x.matches(".*\.\s*"))
这个测试将代码的意图合并到一个测试中。
请注意,您不需要以$
结束正则表达式,因为matches()
必须匹配整个字符串才能返回true
,因此^
和$
在模式的开始/结束处隐含。