Печать и список доступа <Строка []>

Я читаю в файле и храню его в 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
задан Dave Newton 28 June 2015 в 11:15
поделиться

5 ответов

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));
}
21
ответ дан 8 December 2019 в 03:38
поделиться

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

0
ответ дан 8 December 2019 в 03:38
поделиться

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

Чтобы вывести все элементы, вам придется либо просмотреть список 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)
2
ответ дан 8 December 2019 в 03:38
поделиться

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

String[] temp = t1.get(i);
for (int j = 0; j < temp.length; j++)
    System.out.println(temp[j]);
0
ответ дан 8 December 2019 в 03:38
поделиться

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

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

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

дает

["hello","world"]

4
ответ дан 8 December 2019 в 03:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: