我正在读取文件并将其存储在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
答案 0 :(得分:21)
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));
}
答案 1 :(得分:4)
正如Petar所提到的,你的列表是一个字符串数组列表,所以你打印的是数组,而不是数组内容。
打印出数组内容的一种懒惰方法是将数组转换为java.utils.Arrays.toString()的字符串:
String[] stringArray=new String[] { "hello", world };
System.out.println(Arrays.toString(stringArray));
给出
[ “你好”, “世界”]
答案 2 :(得分:1)
使用数组打印List。当List类重载toString()方法以打印每个元素时,该数组使用Object使用的默认toString,它只打印类名和标识哈希。
要打印所有内容,您必须遍历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)
答案 3 :(得分:1)
您可以先将列表转换为数组然后再使用Arrays.toString打印列表内容,如下所示
System.out.println(Arrays.toString(your_list.toArray());
答案 4 :(得分:0)
String[]
是一个字符串数组。您打印数组的地址 - 当您看到[L
表示数组时。您必须遍历每个数组的元素,而不是打印地址:
String[] temp = t1.get(i);
for (int j = 0; j < temp.length; j++)
System.out.println(temp[j]);
答案 5 :(得分:0)
正如我在your other question中所说,在创建自己的Record对象时,您可以实现toString()
函数来返回该信息的合理表示。
答案 6 :(得分:0)
使用Java 8及更高版本的流:
List<String[]> t1 = reader.readAll();
List<String> l = t1.stream()
.flatMap(x -> Arrays.stream(x))
.collect(Collectors.toList());
System.out.println(Arrays.toString(l.toArray()));
基本上,flatMap()会这样做:
Stream(String [])=> 平十,然后映射到=> Stream(String)