如何打印List <list <string []>&gt;的值在java?</list <string []>

时间:2013-09-26 06:03:47

标签: java arrays list csv

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

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

请尽可能帮助我。

1 个答案:

答案 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