Мои String и StringBuilder не отображают вывод в консоли - PullRequest
0 голосов
/ 03 ноября 2019

Я анализирую текстовые данные с одной страницы PDF. Я могу применить регулярное выражение (упомянутое одно из решений stackoverflow) и получить только текст, который я ищу. Проблема в том, что добавление проанализированной строки в StringBuilder на каждой прерывистой итерации показывает данные в консоли во время SOPing, но не конечное значение [все текстовые данные этой конкретной страницы]. Я пробовал следующие вещи:

1) Перейдите в «Окно»> «Установки»> «Выполнить / отладка»> «Отключить консоль» «Ограничить вывод на консоль»

2) Попытка записать ту же строку в текстовом файле.

3) проверил длину строки, которая показывает 3746 (что означает, что в ней много данных).

package com.PDFReaderApp2;

private static ReentrantLock counterLock = new ReentrantLock(true);
private static Pattern PARAGRAPH = Pattern.compile("\\s*^\\s*$\\s*", Pattern.MULTILINE);
private static Pattern MULTISPACE = Pattern.compile("\\s+");
private static boolean flag = false;
private static BufferedWriter writer = null;

public static StringBuilder processString2(String args) {
    StringBuilder builder = new StringBuilder();
    String x = args;
    x = compactLines(x);
    Matcher m = Pattern.compile("\\((.*?)\\)").matcher(x);
    while (m.find()) {
        x = m.group(1);
        builder = builder.append(x);
        x = builder.toString();
        // x= x.replaceAll(System.lineSeparator(), " ");
        System.out.println("-->>  " + x);
    }

    System.out.println("is x empty?: " + x.length());
    x = builder.toString();

    return builder;
}

public static String compactLines(String source) {
    return Stream.of(PARAGRAPH.split(source)).map(para -> MULTISPACE.matcher(para).replaceAll(" "))
            .collect(Collectors.joining("\n"));
}

public void readThisPage(int pageNum) throws IOException {
    writer = new BufferedWriter(new FileWriter("C:\\Users\\bhard\\Desktop\\output.txt", true));
    InputStream inputStream = document.getPages().get(pageNum).getContents();
    String text = new String();
    text = IOUtils.toString(inputStream, StandardCharsets.UTF_8.name());
    System.out.println(text);
    StringBuilder mofo = processString2(text);
    text = mofo.toString();
    System.out.println("is text empty?: " + text.length());
    writer.write(text);
    System.out.println("text of " + pageNum + "\n " + mofo);

}

public static void main(String[] args) throws InvalidPasswordException, IOException {

    ReadPDFFile2 pdf2 = new ReadPDFFile2();
    pdf2.setFileInstance("E:\\E Books\\Novels and Story books\\Adler-Mortimer-How-To-Read-A-Book.pdf",
            "Adler-Mortimer-How-To-Read-A-Book.pdf");
    pdf2.readThisPage(3);

}

}

1 Ответ

1 голос
/ 03 ноября 2019

Вызовите метод close () или flush () для Writer, и он должен показать вывод. Обязательно очистите ресурсы.

...