我有一个带注释的csv文件,其值必须在两个ArrayLists之间拆分。例如:
% the values below here should go
% into ArrayList<Integer> list1
3,4,5,2,2,3
5,6,3,2,4,5
3,2,3,4,5,6
2,3,4,5,1,3
% the values below here should go
% into ArrayList<Integer> list2
4,6,3,4,5,3
3,4,5,6,3,2
4,5,6,4,3,2
实现这一目标的最佳方法是什么?我应该使用每次状态从%变为值时递增的计数器,反之亦然,然后如果计数器%2 = 0,那么添加一个新的ArrayList并开始写入?这是我能想到的唯一方法,但看起来有点笨拙,其他人有更好的想法吗?
编辑:我已经编写了实际解析csv值的代码,我不需要帮助,只是想知道如何将值拆分为两个列表..答案 0 :(得分:0)
你的建议听起来不错。如果文件格式真的如此可预测,那么任何更复杂的方法在我看来可能都是过度的。
但是如果你想看到不同的方法,这就是我的想法:每个不以%
开头的行都是我们要解析为ArrayList
的东西。因此,每当您遇到不是注释的行时,您就会开始将以下行解析为ArrayList
,直到您点击另一个注释或文件末尾。这两个选项都标记了要存储在一个ArrayList
中的零件的末尾。所以,像这样:
ArrayList<ArrayList<Integer>> arrays = new ArrayList<ArrayList<Integer>>();
ArrayList<Integer> currentArray;
while(inputStream.hasNextLine()) {
String line = inputStream.getLine();
if(!lineIsComment(line)) {
// This means that we are in a number block. We store the numbers
// either in an existing list or create a new one if necessary
if(currentArray == null) {
currentArray = new ArrayList<Integer>();
}
addToList(line, currentArray);
} else if(currentArray != null) {
// In this case a comment block starts and currentArray contains
// the numbers of the last number block.
arrays.add(currentArray);
currentArray = null;
}
}
if(currentArray != null) arrays.add(currentArray);
其中lineIsComment(String line)
返回一个布尔值,指示给定的行是否为注释,addToList(String line, ArrayList<Integer> list)
使用您的方法解析一行数字并将它们存储在提供的列表中。