Java - вывод ArrayList - PullRequest
       49

Java - вывод ArrayList

0 голосов
/ 14 марта 2012

Я создал массив Java на языке rows .Теперь у меня есть текстовый файл, который содержит информацию о программе (например: DRAMA-Film A-2.5hours-hi), которая помещается в строку с именем strLine . strLine затем разделяется и помещается в массив строк .

Может кто-нибудь сказать мне, почему ничего не выводится с 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());
  }
  }
}

Ответы [ 5 ]

3 голосов
/ 14 марта 2012

Ваш код распечатывает представление списка массивов по умолчанию. Выводимые вами символы - это ссылки на массив строк, которые вы храните в этом списке. Если вы хотите более подробный вывод, вам нужно будет его кодировать.

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

В качестве примера.

1 голос
/ 14 марта 2012

Метод toString() по умолчанию генерирует внутреннюю строку, которая представляет уникальный объект. Если вы хотите напечатать отформатированную строку содержимого массива, вы можете сделать это:

for (String[] row : rows) {
    System.out.println(Arrays.toString(row));
}
1 голос
/ 14 марта 2012

Вы не можете просто напечатать массив, вам нужно распечатать его части.

for (String[] row : rows)
{
  for (String part : row)
    System.out.print(part + " ");
  System.out.println();
}
0 голосов
/ 14 марта 2012

Реализация ArrayList toString() печатает список, используя реализацию toString() его элементов. Реализация объектов массива toString() не печатает содержимое массива; вместо этого вам нужно использовать Arrays.toString(). Таким образом, вы можете либо перебирать список и печатать каждый массив отдельно (см. Ответы Теда Хоппа и Восприятия), либо, если вы действительно хотите распечатать все это за один раз, вы можете реализовать свой собственный метод печати, например, такой:

<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(", ");
    }
}
0 голосов
/ 14 марта 2012

Вы пытаетесь распечатать массив строк и ожидаете, что он будет выглядеть как строка.

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

...