我有一个看起来像这样的文件:
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
颜色时,我该如何停止?
答案 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;。
希望它有所帮助。 祝你好运。