【问题标题】:Print and access List <String[]>打印和访问列表 <String[]>
【发布时间】:2011-02-28 08:10:51
【问题描述】:

我正在读取一个文件并将其存储在 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

【问题讨论】:

  • 记得“接受”对您有最大帮助的答案(使用绿色复选标记)。

标签: java string list


【解决方案1】:

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));
}

【讨论】:

  • 有没有办法在没有循环的 Java 8 中做同样的事情?
【解决方案2】:

正如 Petar 提到的,您的列表是字符串数组列表,因此您打印的是数组,而不是数组内容。

打印出数组内容的一种懒惰方法是将数组转换为List&lt;String&gt;java.utils.Arrays.toString()

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

给予

[“你好”,“世界”]

【讨论】:

  • "将数组转换为列表" – 可能是字符串?
【解决方案3】:

您打印一个带有数组的列表。当 List 类重载 toString() 方法来打印每个元素时,数组使用 Object 使用的默认 toString,它只打印类名和标识哈希。

要打印所有内容,您必须遍历列表并使用 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)

【讨论】:

    【解决方案4】:

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

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

    【讨论】:

    • 我得到了 List&lt;int[]&gt;Arrays.deepToString(list.toArray()) 的奇迹!
    • Arrays.deepToString(list.toArray()) 为我工作。谢谢
    【解决方案5】:

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

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

    【讨论】:

      【解决方案6】:

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

      【讨论】:

        【解决方案7】:

        使用流,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[]) => flat10 和 Map 它到 => Stream(String)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-03-04
          • 2021-07-24
          • 1970-01-01
          相关资源
          最近更新 更多