Печать и доступ к списку <String []> - PullRequest
6 голосов
/ 06 июня 2010

Я читаю в файле и храню его в t1. Как мне получить доступ к элементам в t1? Когда я пытаюсь напечатать это, я получаю адреса вместо значений. Также в чем разница между String и String[]?

        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

Ответы [ 6 ]

21 голосов
/ 06 июня 2010

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));
}
4 голосов
/ 06 июня 2010

Как упоминал Петр, ваш список - это список массивов строк, поэтому вы распечатываете массив, а не содержимое массива.

Ленивый способ распечатать содержимое массива - преобразовать массив в List<String> с помощью java.utils.Arrays.toString():

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

т

[ "привет", "мир"]

2 голосов
/ 06 июня 2010

Вы распечатываете список с массивами. В то время как классы List перегружают метод toString () для печати каждого элемента, массив использует стандартную toString, используемую Object, которая печатает только имя класса и хэш идентификатора.

Чтобы распечатать все, что вам нужно либо пройти по списку, и распечатать каждый массив с помощью Arrays.toString ().

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

Или вы помещаете каждый массив в список

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)
1 голос
/ 28 июня 2015

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

System.out.println(Arrays.toString(your_list.toArray());
0 голосов
/ 06 июня 2010

Как я уже говорил в на ваш другой вопрос , при создании собственного объекта Record вы можете реализовать функцию toString() для возврата разумного представления этой части информации.

0 голосов
/ 06 июня 2010

String[] - это массив строк. Вы печатаете адрес массива - когда вы видите [L, что означает массив. Вы должны перебирать элементы каждого массива, а не печатать адрес:

String[] temp = t1.get(i);
for (int j = 0; j < temp.length; j++)
    System.out.println(temp[j]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...