在 Java 中拆分以 "." 结尾的段落和点后的新行



我正在尝试从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,因此^$在模式的开始/结束处隐含

最新更新