【问题标题】:How to print the values of the List<List<String[]>> in java?如何在 java 中打印 List<List<String[]>> 的值?
【发布时间】:2013-09-26 06:03:46
【问题描述】:

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

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

如果可能,请帮助我。

【问题讨论】:

  • ego ce4,venus - “ego”应该出现在这一行吗? ..我的意思是你显示的i/p,对吗?
  • 对不起,我不明白@Rohit,请详细说明您的问题是什么?我已经详细说明了我的要求。谢谢。
  • 你为什么不遍历你的列表?
  • 是的,这里的“Keywords”和“AlternateKeywords”是各自列的标题。请帮忙,有什么想法吗?
  • 如何迭代?这就是我没有得到的......我基本上必须迭代才能从列表中获取数组,对吗?

标签: java arrays list csv


【解决方案1】:

看看你的结构:

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

您不需要像 List&lt;List&lt;String[]&gt;&gt; 这样的 3D,而只需要 2D List&lt;List&lt;String&gt;&gt;

这是工作代码

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

【讨论】:

  • 感谢您的建议,但我不希望数组中的标题只是标题后面的元素。任何进一步的帮助将不胜感激,没有“关键字”和“备用关键字”。
  • 评论tempArr.add(header);
  • 你的程序可以工作,然后如何从上面的数组列表中获取我的实际问题@Maxim
猜你喜欢
  • 2015-03-18
  • 1970-01-01
  • 2022-01-05
  • 2018-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-08
  • 1970-01-01
相关资源
最近更新 更多