0

我想从列表中获取各个数组的值并利用它们

 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 只是一个示例。

如果可能,请帮助我。

4

1 回答 1

3

看看你的结构:

array[] keyword={apple,orange,ego ce4,demo}
array[] banana={banana,ego kit,venus,cat}

你不需要像 3D 一样List<List<String[]>>,但只需要 2DList<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

于 2013-09-26T06:44:48.283 回答