阅读以下格式的文本文件:
line1
line2
line3
line4
用例是将前两行附加到列表中,将最后两行附加到另一个列表中,最后将列表附加到列表列表中。
代码:
public static void readUI() {
try {
BufferedReader br = new BufferedReader(new FileReader(filePath2));
ArrayList list = new ArrayList();
ArrayList<ArrayList<String>> checkList = new ArrayList<>();
String line;
String[] splitline;
String[] subSplit;
//populating the first list
while ((line = br.readLine()) != null) {
System.out.println(line);
if (!line.trim().isEmpty()) {
list.add(line.trim());
} else {
checkList.add(list);
list.clear();
}
}
//System.out.println(checkList);
//System.out.println(checkList.get(0));
//System.out.println(checkList.get(1));
} catch (IOException e) {
System.out.println("OOPS! File could not read!");
}
}
逻辑解释:
从文件中读取行并继续将其附加到列表中,当遇到空行时,将列表附加到列表列表并清除单个列表。
错误:
它将作为单个列表而不是2个单个列表附加到列表列表中。
有关如何更正的建议吗?
答案 0 :(得分:2)
到达新线时,永远不会创建新列表。相反,您将列表添加到另一个列表,然后清除它。
您需要使用list.clear()
list = new ArrayList<>()
,而不是调用CarOwner
答案 1 :(得分:1)
您应该在while循环结束后添加以下代码
if(list.size() > 0){
checkList.add(list);
}
这将确保将第二个(或最后一个)列表添加到checkList。
答案 2 :(得分:0)
我会这样做:
public static void readUI() {
try (BufferedReader br = Files.newBufferedReader(filePath2)) {
List list = new ArrayList();
List<List<String>> checkList = new ArrayList<>();
br.lines().forEach(line -> {
if(line.trim().isEmpty())){
checkList.add(list);
list = new ArrayList();
} else {
list.add(line);
}
});
if(!list.isEmpty()){
checkList.add(list);
}
} catch (IOException e) {
System.out.println("OOPS! File could not read!");
}
}