用Java读取文本文件到空行

时间:2017-05-09 21:36:28

标签: java list

阅读以下格式的文本文件:

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个单个列表附加到列表列表中。

有关如何更正的建议吗?

3 个答案:

答案 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!");
    }
}