2010-06-06 12 views
6

Estoy leyendo en un archivo y lo estoy almacenando en t1. ¿Cómo accedo a los elementos en t1? Cuando intento imprimirlo obtengo direcciones en lugar de valores. ¿Cuál es la diferencia entre String y String[]?Imprimir y acceder a la lista <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++; 
     } 

de salida:

[Ljava.lang.String;@9304b1 
[Ljava.lang.String;@190d11 
[Ljava.lang.String;@a90653 
[Ljava.lang.String;@de6ced 
+0

gracias por toda la ayuda =] – nubme

+0

Recuerde que "aceptar" una respuesta que mejor te ayudó (usando la marca de verificación verde). – Jonik

Respuesta

19

String [] es una matriz de cadenas, de ahí la razón por la que no está imprimiendo como era de esperar, tratar:

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

O más concisa:

for (String[] strings : t1) { 
    for (String s : strings) { 
     System.out.print(s + " "); 
    } 
    System.out.println(); 
} 

O mejor aún:

for (String[] strings : t1) { 
    System.out.println(Arrays.toString(strings)); 
} 
+0

¿Hay alguna manera de hacer lo mismo en Java 8 sin bucle? – chandresh

0

String[] es una matriz de cadenas. Imprime la dirección de la matriz, cuando ve [L que significa una matriz. Usted tiene que recorrer los elementos de cada matriz, en lugar de imprimir la dirección:

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

Como se mencionó Petar, su lista es una lista de matrices de cadenas, por lo que está imprimiendo a cabo la matriz, no el contenido de la matriz .

Una manera perezosa para imprimir el contenido de la matriz es convertir la matriz a una cadena con java.utils.Arrays.toString():

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

da

[ "hola", "tierra"]

+0

"convertir la matriz a una lista" - ¿a una cadena, tal vez? – Jonik

+0

duh, de hecho. :) Editado .... – CuriousPanda

1

Imprime una lista con matrices. Mientras que las clases de lista sobrecargan el método toString() para imprimir cada elemento, la matriz utiliza el valor predeterminado toString utilizado por Object, que solo imprime el nombre de clase y el hash de identidad.

Para imprimir todo lo que tenga que recorrer a lo largo de la lista e imprimir cada matriz con Arrays.toString().

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

o ponerle cada matriz en una lista

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

Como dije en your other question, al crear su propio objeto Record, se puede implementar la función toString() para devolver una representación razonable de ese pedazo de información.

0

Puede imprimir el contenido de la lista convirtiendo simplemente en la lista a la matriz primero y luego usando Arrays.toString, como a continuación

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

Para mí, no proporciona la salida correcta. –

Cuestiones relacionadas