java:无法存储.txt文件的每个段落在arraylist中

tez616oj  于 2021-07-03  发布在  Java
关注(0)|答案(3)|浏览(396)

主要目标是将.txt文件中包含的段落的每一行存储到arraylist中,直到我们偶然发现一个空行(仅包含字符串“”的行)。将段落的全部内容存储到arraylist之后,我们将arraylist本身存储到一个arraylist,该arraylist存储.txt文件的段落。
问题是,在loadParagations()结束后打印arraylist的内容后,结果发现只有.txt的最后一段存储在arraylist的每个位置。例如,如果“this is the content of last paragraph”是.txt文件最后一段的内容,并且该文件有4个段落,那么在打印arraylist元素之后,我得到结果[[“this is content of last paragraph”],[“this is content of last paragraph”],[“this is content of last paragraph”]]。有什么想法吗?

import java.io.FileNotFoundException;

导入java.io.fileinputstream;
导入java.util.list;导入java.util.arraylist;
导入java.util.scanner;
公共类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);
    }

}

}

byqmnocz

byqmnocz1#

我可以建议添加一个常量字符串作为段落分隔符,比如“########”,并在移到下一段之前添加到子行块中。这样就不需要两个列表了。

des4xlb0

des4xlb02#

当你把段落加到 lineblocks1 列表您需要创建一个新的arraylist,否则它们将全部添加到一个列表中。

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

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

6ie5vjzr3#

你能试一下吗,

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);
}

当一个新的段落开始时,您必须重新初始化子行块,在循环之后,您必须将最后一个段落添加到列表中

相关问题