簡體   English   中英

Java:無法存儲a.txt文件的每一段。 在 ArrayList <arraylist<string> &gt; </arraylist<string>

[英]Java: unable to store every paragraph of a .txt file. in a ArrayList<ArrayList<String>>

主要目標是將 .txt 文件中包含的段落的每一行存儲到 ArrayList 直到我們偶然發現一個空行(僅包含字符串“”的行)。 將段落的全部內容存儲到 ArrayList 后,我們將 ArrayList 本身存儲到存儲 .txt 文件段落的 ArrayList 中。

問題是,在 loadParagraphs() 結束后打印 ArrayList 的內容后,結果發現只有最后一段 .txt 存儲在 ArrayList 中的每個 position 中。 因此,例如,如果“這是最后一段的內容”是 .txt 文件的最后一段的內容,並且該文件有 4 段,那么在打印 ArrayList 元素后,我得到結果 [["This是最后一段的內容"],["這是最后一段的內容"],["這是最后一段的內容"]]。 有任何想法嗎?

import java.io.FileNotFoundException;

導入 java.io.FileInputStream;

導入 java.util.List; 導入 java.util.ArrayList;

導入 java.util.Scanner;

公共 class Pdf {

private List<List<String>> lineblocks1 = new ArrayList<List<String>>();
private String filePath;
private Scanner inputReader = null;

public Pdf(String filePath) {
    this.filePath = filePath;
}

public void loadParagraphs() {

    List<String> subLineblocks = new ArrayList<String>();

    try {
        inputReader = new Scanner(new FileInputStream(filePath));
    } catch (FileNotFoundException e) {
        System.out.println("Error opening file.");
        System.exit(0);
    }

    while (inputReader.hasNextLine()) {
        String line = inputReader.nextLine();

        if (!line.equals("")) {
            subLineblocks.add(line);
        } else {
            lineblocks1.add(subLineblocks);
            subLineblocks.removeAll(subLineblocks);

        }
    }
}

public void printParagraphs() {
    for (List<String> par : lineblocks1) {
        System.out.println(par);
    }

}

}

當您將段落添加到lineblocks1列表時,您需要創建一個新的 ArrayList 否則它們將全部添加到單個列表中。

    while (inputReader.hasNextLine()) {
      String line = inputReader.nextLine();

      if (!line.equals("")) {
          subLineblocks.add(line);
      } else {
        lineblocks1.add(subLineblocks);
        subLineblocks = new ArrayList<String>();
      }
  }

你可以嘗試以下,

while (inputReader.hasNext()) {
    String line = inputReader.nextLine();
    if (!line.isEmpty()) {
        subLineblocks.add(line);
    } else {
        subLineblocks = new ArrayList<String>();
        lineblocks1.add(subLineblocks);

    }
}
if (!subLineblocks.isEmpty()) {
    lineblocks1.add(subLineblocks);
}

當一個新的段落開始並且在循環之后你必須將最后一個段落添加到列表中時,你必須重新初始化 subLineblocks

我可以建議添加一個常量字符串以用作 Paragraph.separator 之類的“######”,並在移動到下一個段落之前添加到 subLineblocks 中。 這應該消除對兩個列表的需要。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM