【问题标题】:Java - ArrayList OutputJava - ArrayList 输出
【发布时间】:2012-03-31 06:47:12
【问题描述】:

我在 Java 中创建了一个名为 rows 的数组列表。现在我有一个文本文件,其中包含有关程序的信息(例如:DRAMA-Film A-2.5hours-hi),它被放入一个名为 strLine 的字符串中。 strLine 然后被拆分并放入arraylist rows。

谁能告诉我为什么 system.out.println 语句没有输出任何内容?

import java.io.*;
import java.util.*;


class Processing
{
 public static void main(String args[])
  {
  try{

  FileInputStream fstream = new FileInputStream("file.txt");

  DataInputStream in = new DataInputStream(fstream);
  BufferedReader br = new BufferedReader(new InputStreamReader(in));
  String strLine = null;

  List<String[]> rows = new ArrayList<String[]>();

    while ((strLine = br.readLine()) != null)   {


        String[] row = strLine.split("-");
        rows.add(row);

  }
  System.out.println(rows.toString());

  in.close();
    }catch (Exception e){
  System.err.println("Error: " + e.getMessage());
  }
  }
}

【问题讨论】:

  • 你真的是说 nothing 正在打印吗?
  • 你调试了吗?是否达到 syso 声明?您是否测试过您是否正确访问了该文件?
  • @Ted Hopp Netbeans 没有给我任何输出,尽管告诉我构建成功
  • 抱歉我错过了什么:[[Ljava.lang.String;@1b0bf9a, [Ljava.lang.String;@f32dde]
  • 必须至少打印一些内容。打印什么?

标签: java arrays string arraylist split


【解决方案1】:

您的代码正在打印出数组列表的默认表示。您看到的输出符号是您存储在此列表中的字符串数组引用。如果您想要更详细的输出,则需要为其编写代码。

for(final String[] row: rows) {
    System.out.println(Arrays.toString(row);
}

举个例子。

【讨论】:

  • 我想要的只是拆分文本文件中的文本并将它们放入一个数组中,然后将其放入数组列表中。我不明白你的实际意思,但字符串不是作为字符串放入数组中吗?我的意思是,他们为什么改变了?
  • 您已经实现了既定目标。您看到的符号打印出来,例如[Ljava.lang.String;@1b0bf9a 是 array 引用。您存储到 ArrayList 中的相同数组。如果您想查看每个单独数组中的元素,那么您需要使用我在答案中显示的代码。
  • 我仍然得到相同的输出:/
  • @Brian 所有对象都有一个 toString() 方法,但这并不神奇:有些对象没有一个 toString() 方法,它以您想要的方式提供其内容的字符串表示看见了。 rows 是一个 List,它没有一个 toString() 方法可以按照你想要的方式打印它(它怎么知道你想如何分隔 String 数组和 String 数组元素?逗号?单独的行?)。这就是为什么您必须提供自己的实现,例如在这个答案中。
【解决方案2】:

你不能只打印一个数组,你需要打印它的各个部分。

for (String[] row : rows)
{
  for (String part : row)
    System.out.print(part + " ");
  System.out.println();
}

【讨论】:

    【解决方案3】:

    默认的toString() 方法会生成一个表示唯一对象的内部字符串。如果要打印数组内容的格式化字符串,可以这样做:

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

    【讨论】:

    • 我仍然得到相同的输出:/
    【解决方案4】:

    您正在尝试打印出一个字符串数组,并希望它看起来像一个字符串。

      System.out.println(rows.toString());
    

    当你调用它时,默认情况下它会打印出列表中的每个元素,但是每个元素,正如你所编程的那样,它是 String[] 的一个实例,而不是 String。您需要更深入地了解初始风格才能获得预期的结果。

    尝试添加这样的方法:

        public static void print(List<String[]> list) {
    
         for(String[] arr : list) {
             StringBuffer buff = new StringBuffer();
             for(int i = 0; i < arr.length; i++) {
                 buff.append(arr[i]);
             }
             System.out.println(buff.toString());
         } 
     }
    

    然后拨打print(rows);

    【讨论】:

      【解决方案5】:

      toString() 的 ArrayList 实现使用其元素的 toString() 实现打印列表。 toString() 的数组对象实现不打印数组内容;相反,您需要使用Arrays.toString()。因此,您可以遍历列表并分别打印每个数组(请参阅 Ted Hopp 和 Perception 的答案),或者如果您真的想一次性打印所有内容,您可以实现自己的打印方法,如下所示:

      <T> String collectionOfArrsToString(Collection<T[]> collection) {
          // Adapted from AbstractCollection.toString() implementation
          Iterator<T[]> i = collection.iterator();
          if (!i.hasNext())
              return "[]";
      
          StringBuilder sb = new StringBuilder();
          sb.append('[');
          for (;;) {
              T[] tArr = i.next();
              sb.append(Arrays.toString(tArr));
              if (!i.hasNext())
                  return sb.append(']').toString();
              sb.append(", ");
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多