我正在尝试从配置文件中读取行,并使用ArrayList
方法将每一行附加到add()
中。
但是,当我打算通过使用ArrayList
打印foreach
的内容时,它仅打印要输入的最后一项。在我看来,add()方法可能未正确附加?我还尝试使用泛型for循环而不是foreach
,但结果仍然相同。
public static void interpret(String line){
ArrayList<String> rooms = new ArrayList<>();
ArrayList<String> rules = new ArrayList<>();
// Ignore Room and Rule templates
if(line.contains("(") && line.contains(")")){
System.out.println("skip");
return;
}
if(line.contains("Room;")){
rooms.add(line);
rooms.forEach(System.out::println);
}
if(line.contains("Rule;")){
rules.add(line);
rules.forEach(System.out::println);
}
}
其输出如下。
Rule; (Room: SmartObject, state{condition}, state{condition}, ...)
skip
Rule; Garden: Sprinklers, on{time=15}, off{time=16}, off{weather="raining"}
Rule; Garden: Sprinklers, on{time=15}, off{time=16}, off{weather="raining"}
Rule; Kitchen: Coffee machine, on{time=6}, off{time=12}
Rule; Kitchen: Coffee machine, on{time=6}, off{time=12}
它与阅读文件中的实际文本行混合在一起,但是如您所见,它仅在其上方打印行,这是要追加到ArrayList
的最后一行。
它应该看起来像这样。
Rule; (Room: SmartObject, state{condition}, state{condition}, ...)
skip
Rule; Garden: Sprinklers, on{time=15}, off{time=16}, off{weather="raining"}
Rule; Garden: Sprinklers, on{time=15}, off{time=16}, off{weather="raining"}
Rule; Kitchen: Coffee machine, on{time=6}, off{time=12}
Rule; Garden: Sprinklers, on{time=15}, off{time=16}, off{weather="raining"}
Rule; Kitchen: Coffee machine, on{time=6}, off{time=12}
任何帮助/见解将不胜感激。
答案 0 :(得分:1)
这是问题所在:
ArrayList<String> rules = new ArrayList<>();
您每次都创建一个新的ArrayList,而不是添加到现有的ArrayList中
建议:
答案 1 :(得分:0)
使用以下方法:
public static void interpret(List<String> rooms, List<String> rules, String line){
// Ignore Room and Rule templates
if(line.contains("(") && line.contains(")")){
System.out.println("skip");
return;
}
if(line.contains("Room;")){
rooms.add(line);
rooms.forEach(System.out::println);
}
if(line.contains("Rule;")){
rules.add(line);
rules.forEach(System.out::println);
}
}
与其在每次调用此函数时都创建列表,不如在调用方函数中创建列表并传递给此方法。