在java中读取文件,直到找到一行

时间:2015-06-06 17:07:45

标签: java arraylist

我有一个看起来像这样的文件:

color1 red
color2 blue
color3 white
end
color1 blue
color2 green
end
color1 black
color2 white
color3 red
end

我想阅读此文件,并将数据放在end

中的ArrayList<ArrayList<HashMap<String,String>>>之间

我的代码:

public ArrayList<ArrayList<HashMap<String,String>>> getColors (String path) {
        ArrayList<ArrayList<HashMap<String,String>>> allColors = new ArrayList<ArrayList<HashMap<String,String>>>();

        try {
            BufferedReader br = new BufferedReader(new FileReader(path));
            String line = null;
            ArrayList<HashMap<String,String>> color = new ArrayList<HashMap<String,String>>();
            while((line = br.readLine()) != null) {
                String[] tokens = line.split(" ");
                String color = tokens[0];
                String colorValue = tokens[1];
                HashMap<String,String> colorWithValue = new HashMap<String,String>();
                colorWithValue.put(color, colorValue);

                color.add(colorWithValue);
            }
            allColors.add(color);
            br.close();         
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        return allColors;
    }

问题是当我找到end并重新开始构建新的ArrayList颜色时,我该如何停止?

2 个答案:

答案 0 :(得分:1)

你可以使用这样的东西。

        while((line = br.readLine()) != null) {
            if ("end".equals(line.trim())) {
                 allColors.add(color);
                 color = new ArrayList<HashMap<String,String>>();
            }
            else {
            String[] tokens = line.split(" ");
            String color = tokens[0];
            String colorValue = tokens[1];
            HashMap<String,String> colorWithValue = new HashMap<String,String>();
            colorWithValue.put(color, colorValue);

            color.add(colorWithValue);
            }
        }
        br.close();
P:你的allColors非常深,以至于我看到了它们的彩虹......

答案 1 :(得分:1)

如果你坚持使用这种方法..我建议使用这个算法...

public static ArrayList<ArrayList<HashMap<String, String>>> getColors(String path)
{
    ArrayList<ArrayList<HashMap<String, String>>> allColors = new ArrayList<>();

    try
    {
        BufferedReader br = new BufferedReader(new FileReader(path));
        String line;
        do 
        {
            line = br.readLine();
            ArrayList<HashMap<String, String>> colors = new ArrayList<>();
            while (line != null && !"end".equals(line)) { 
                String[] tokens = line.split(" ");
                String color = tokens[0];
                String colorValue = tokens[1];
                HashMap<String, String> colorWithValue = new HashMap<>();
                colorWithValue.put(color, colorValue);

                colors.add(colorWithValue);
                line = br.readLine();
            }
            allColors.add(colors);
        } while (line != null);
        br.close();
    }
    catch (FileNotFoundException e)
    {
        e.printStackTrace();
    }
    catch (IOException e)
    {
        e.printStackTrace();
    }

    return allColors;
}

但您可以使用其他算法对其进行归档。您可以通过使用其他结构来降低算法的复杂性。你知道..在我的生活中永远不要使用像ArrayList<ArrayList<HashMap<String, String>>这样的深层嵌套结构。

考虑使用其他抽象或类来降低复杂性......如果你正在学习......那将是我最后的建议。

另外请...您的代码有一个重复的变量:&#34; color&#34;。

希望它有所帮助。 祝你好运。