打印并访问List <string []> </string []>

时间:2010-06-06 08:27:14

标签: java string list

我正在读取文件并将其存储在t1中。如何访问t1中的元素?当我尝试打印它时,我得到的是地址而不是值。还有StringString[]之间的区别?

        CSVReader reader = new CSVReader(new FileReader("src/new_acquisitions.csv"));
        List <String[]> t1 = reader.readAll();

        int i = 0
        while(i < t1.size()) {
          System.out.println(t1.get(i));
          i++;
        }

输出:

[Ljava.lang.String;@9304b1
[Ljava.lang.String;@190d11
[Ljava.lang.String;@a90653
[Ljava.lang.String;@de6ced

7 个答案:

答案 0 :(得分:21)

String []是一个字符串数组,因此它没有像你期望的那样打印,请尝试:

for (int i = 0; i < t1.size(); i++) {
    String[] strings = t1.get(i);
    for (int j = 0; j < strings.length; j++) {
        System.out.print(strings[j] + " ");
    }
    System.out.println();
}

或者更简洁:

for (String[] strings : t1) {
    for (String s : strings) {
        System.out.print(s + " ");
    }
    System.out.println();
}

或者更好:

for (String[] strings : t1) {
    System.out.println(Arrays.toString(strings));
}

答案 1 :(得分:4)

正如Petar所提到的,你的列表是一个字符串数组列表,所以你打印的是数组,而不是数组内容。

打印出数组内容的一种懒惰方法是将数组转换为java.utils.Arrays.toString()的字符串:

String[] stringArray=new String[] { "hello", world };
System.out.println(Arrays.toString(stringArray));

给出

  

[ “你好”, “世界”]

答案 2 :(得分:1)

使用数组打印List。当List类重载toString()方法以打印每个元素时,该数组使用Object使用的默认toString,它只打印类名和标识哈希。

要打印所有内容,您必须遍历List并使用Arrays.toString()打印每个数组。

for(String[] ar:t1)System.out.print("["+Arrays.toString(ar)+"]");

或者您将每个数组放入List

List<List<String>> tt1 = new ArrayList<List<String>>();
for(String[] ar: t1)tt1.add(Arrays.asList(ar));//wraps the arrays in constant length lists
System.out.println(tt1)

答案 3 :(得分:1)

您可以先将列表转换为数组然后再使用Arrays.toString打印列表内容,如下所示

System.out.println(Arrays.toString(your_list.toArray());

答案 4 :(得分:0)

String[]是一个字符串数组。您打印数组的地址 - 当您看到[L表示数组时。您必须遍历每个数组的元素,而不是打印地址:

String[] temp = t1.get(i);
for (int j = 0; j < temp.length; j++)
    System.out.println(temp[j]);

答案 5 :(得分:0)

正如我在your other question中所说,在创建自己的Record对象时,您可以实现toString()函数来返回该信息的合理表示。

答案 6 :(得分:0)

使用Java 8及更高版本的流:

List<String[]> t1 = reader.readAll();
List<String> l = t1.stream()
                   .flatMap(x -> Arrays.stream(x))
                   .collect(Collectors.toList());

System.out.println(Arrays.toString(l.toArray()));

基本上,flatMap()会这样做:

Stream(String [])=> 十,然后映射到=> Stream(String)