【发布时间】:2013-01-30 19:56:07
【问题描述】:
我在执行编程任务时遇到了一个小问题。我想从文件中读取一些行(到目前为止没问题)并对其进行标记。每行大约有 4 个标记,每个标记都应该在列表中找到一个位置。最后,每一行也应该在一个列表中。
一个小例子来说明这一点:
文件内容:
foo boo bar
bii buu baa
输出:
[[foo, boo, bar], [bii, buu, baa]]
这是我正在处理的代码
String fileContent = fileloader(file.toString());
List<String> linesList = new ArrayList<String>();
String[] lines = fileContent.split("\n");
for(String line:lines){
String[] splittedLine = line.split("\t");
for(String words:splittedLine){
linesList.add(words);
}
lexiconContent.add(linesList);
linesList.removeAll(linesList);
}
我猜引用有问题,因为第一次迭代运行良好!但在第二次迭代中,它会将 实际 第二个内容也复制到第一个 (0) 列表位置,依此类推。
最后我得到了类似[[], [], [], []]
【问题讨论】:
-
linesList.clear()可能更快/更好地获得下一次迭代的干净列表。根据您对 lexiconContent 所做的操作,请考虑使用lexiconContent.addAll(linesList)。它将每个列表元素添加到 lexiconContent,而不是添加列表本身;但我认为这就是你所要求的。 -
如果你确实想要列表列表,你会想要使用复制构造函数,或者
Collections.copy()api
标签: java list reference copy deep-copy