有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java:无法存储文档的每个段落。txt文件。在ArrayList<ArrayList<String>>

主要目标是存储中包含的段落的每一行。txt文件到ArrayList,直到我们偶然发现一个空行(仅包含字符串“”的行)。将段落的全部内容存储到ArrayList后,我们将ArrayList本身存储到ArrayList,该ArrayList存储段落的段落。txt文件

问题是,在loadPages()结束后打印ArrayList的内容后,结果发现只有。txt存储在ArrayList的每个位置。因此,例如,如果“这是最后一段的内容”,那么“这是最后一段的内容”。txt文件,该文件有4个段落,然后在打印ArrayList元素后,我得到结果[[“这是最后一段的内容”],[“这是最后一段的内容”],[“这是最后一段的内容”]。有什么想法吗

import java.io.FileNotFoundException;

导入java。木卫一。文件输入流

导入java。util。列表 导入java。util。ArrayList

导入java。util。扫描仪

公共类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);
    }

}

}


共 (3) 个答案

  1. # 1 楼答案

    你能试试下面的吗

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

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

  2. # 2 楼答案

    将段落添加到lineblocks1列表时,需要创建一个新的ArrayList,否则它们将全部添加到单个列表中

        while (inputReader.hasNextLine()) {
          String line = inputReader.nextLine();
    
          if (!line.equals("")) {
              subLineblocks.add(line);
          } else {
            lineblocks1.add(subLineblocks);
            subLineblocks = new ArrayList<String>();
          }
      }
    
  3. # 3 楼答案

    我可以建议添加一个常量字符串作为段落使用吗。分隔符类似于“#######”并添加到子行块中,然后再移动到下一段。这样就不需要两个列表了