分割以#34;。"结尾的段落。 Java中的dot后面的新行

时间:2015-06-01 22:09:26

标签: java netbeans pdfbox

我正在尝试从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文件中读取。

1 个答案:

答案 0 :(得分:0)

您遇到的最严重的错误是您使用endsWith()拨打"\\.",这是两个字符;一个字面反斜杠和一个文字点(一个转义点)和"\\.\\s+"(再次是所有文字字符)。很明显,你(错误地)认为该方法接受正则表达式,但它没有。

假设您的逻辑是合理的,请更改您的测试以使用基于正则表达式的测试:

 if (x.matches(".*\\.\\s*"))

此测试将您的代码意图合并为一个测试。

请注意,您不需要使用$结束正则表达式,因为matches()必须与整个字符串匹配才能返回true,因此{{在模式的开头/结尾,1}}和^ 隐含