主要目标是将.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);
}
}
}
3条答案
按热度按时间byqmnocz1#
我可以建议添加一个常量字符串作为段落分隔符,比如“########”,并在移到下一段之前添加到子行块中。这样就不需要两个列表了。
des4xlb02#
当你把段落加到
lineblocks1
列表您需要创建一个新的arraylist,否则它们将全部添加到一个列表中。6ie5vjzr3#
你能试一下吗,
当一个新的段落开始时,您必须重新初始化子行块,在循环之后,您必须将最后一个段落添加到列表中