我想从列表中获取各个数组的值并使用它们
import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;
import au.com.bytecode.opencsv.CSVReader;
public class ReadCSV {
public static void main(String[] args) {
String startFile = "/Users/ray/Downloads/hello.csv";
//String outFile = "./outData.xml";
try {
CSVReader reader = new CSVReader(new FileReader(startFile));
String[] line = null;
String[] header = reader.readNext();
List<List<String[]>> out = new ArrayList<List<String[]>>();
while((line = reader.readNext())!=null){
List<String[]> item = new ArrayList<String[]>();
for (int i = 0; i < header.length; i++) {
String[] keyVal = new String[2];
String string = header[i];
System.out.println("the value of the header : "+string);
String val = line[i];
System.out.println("the value of the field : "+val);
keyVal[0] = string;
keyVal[1] = val;
item.add(keyVal);
}
out.add(item);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
我有一个以下格式的csv文件: -
Keyword,AlternateKeywords---> these are the header fields
apple,banana
orange,ego kit
ego ce4,venus
demo,cat
我希望数组采用以下形式:
array[] keyword={apple,orange,ego ce4,demo}
array[] banana={banana,ego kit,venus,cat}
我不知道如何从List'out'获取数据并获取值并打印如上所述的元素。它可以是该特定列的任意数量的标题和任意数量的元素,上面的csv只是一个例子。
请尽可能帮助我。
答案 0 :(得分:3)
看看你的结构:
array[] keyword={apple,orange,ego ce4,demo}
array[] banana={banana,ego kit,venus,cat}
您不需要像List<List<String[]>>
这样的3D,而只需要2D List<List<String>>
这是工作代码
public static void main(String[] args) {
String startFile = "C:\\workspacePrototype\\some.csv";
try {
CSVReader reader = new CSVReader(new FileReader(startFile));
String[] line = null;
String[] headers = reader.readNext();
List<List<String>> build = new ArrayList<List<String>>();
List<String> tempArr;
// generate headers
for(String header : headers){
tempArr = new ArrayList<String>();
tempArr.add(header);
build.add(tempArr);
}
// generate content
while((line = reader.readNext())!=null){
for (int i = 0; i < build.size(); i++) {
tempArr = build.get(i);
String val = line[i];
tempArr.add(val);
build.set(i, tempArr);
}
}
System.out.println(Arrays.asList(build));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
输出:
[[[Keyword, apple, orange, ego ce4, demo], [AlternateKeywords, banana, ego kit, venus, cat]]]
<强> [编辑] 强>
顺便说一句,你可以创建一些类: public class Column{
private String mName;
private List<String> mData;
// get/set
}
而是
List<List<String>> build = new ArrayList<List<String>>();
使用像:
List<Column> build = new ArrayList<Column>();
通过这种方式Column
类应将列名存储到mName
,将数据存储到mData