将文本文件的值存储在列表列表中

时间:2018-08-02 12:08:53

标签: java

我有以下文本文件:

1 ---------------------------------------------------
int int0 = (-2586);
int int1 = 3580;
int int2 = 2315;
int int3 = (-1974);
2 ---------------------------------------------------
int int0 = (-2586);
int int1 = 3580;
int int2 = 2315;
int int3 = (-1974);
3 ---------------------------------------------------
int int0 = (2586);
int int1 = 3580;
int int2 = 2315;
int int3 = (-1974);

我想将每个集合的整数值(在示例中为3个集合)存储在一个列表中,并将所有列表存储在一个列表中。为此:

    BufferedReader reader;

    ArrayList<List<Integer>> list = new ArrayList<List<Integer>>();

    List<Integer> objSuite = new ArrayList<Integer>();

    try {
        reader = new BufferedReader(new FileReader("file1.txt"));

        String line = reader.readLine();

        while (line != null) {
            if(line.contains("------")) {
                list.add(objSuite);
                objSuite = new ArrayList<Integer>();
            }

            if(line.contains("int int")) {
                Pattern p = Pattern.compile(".*?(-?\\d+)\\D*$");
                Matcher m = p.matcher(line);
                if (m.matches()) {
                    objSuite.add(Integer.parseInt(m.group(1)));
                }
            }

            line = reader.readLine();
        }

        reader.close();

    } catch (IOException e) {
        e.printStackTrace();
    }

运行此代码时,我得到以下结果:

[]
[-2586, 3580, 2315, -1974]
[-2586, 3580, 2315, -1974]

我期望的是以下结果:

[-2586, 3580, 2315, -1974]
[-2586, 3580, 2315, -1974]
[2568, 3580, 2315, -1974]

当前实现不包括第三组的值。你知道如何解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

您似乎在循环开始时将其添加到列表中。

在循环结束后添加一个list.add(objSuite);,或考虑将其移入函数中,以避免输入空对象作为数组的第一个元素。