我有一个CSV文件。它有很多行。在每一行中都有多个以逗号分隔的值。
我正在使用OPENCSV从文件中提取数据。我希望能够直接转到列表数据结构中的任何特定行。
CSVReader reader = new CSVReader(new FileReader(
"myfile.csv"));
try {
List<String[]> myEntries = reader.readAll();
for (String[] s : myEntries) {
System.out.println("Next item: " + s);
}
} catch (IOException e) {
e.printStackTrace();
}
打印
Next item: [Ljava.lang.String;@6c8b058b
Next item: [Ljava.lang.String;@1b192059
Next item: [Ljava.lang.String;@e9ac0f5
Next item: [Ljava.lang.String;@51f21c50
Next item: [Ljava.lang.String;@6e20f237
Next item: [Ljava.lang.String;@34fe315d
Next item: [Ljava.lang.String;@1c5aebd9
Next item: [Ljava.lang.String;@1532021a
Next item: [Ljava.lang.String;@62803d5
Next item: [Ljava.lang.String;@2d13981b
Next item: [Ljava.lang.String;@61672bbb
我想知道无论如何我都可以通过List访问各个行,元素。
即
1,2,3,4,5
6,7,8,9,10
11,12,13,14
15,16,17,18
我想要String [] nextLine = 1,2,3,4,5(其中nextLine [0] = 1 nextLine [1] = 2等)并且在下一次迭代中,nextLine应该是6,7,8,9 ,等等
答案 0 :(得分:41)
List
接口支持通过get
方法进行随机访问 - 获取第0行,使用list.get(0)
。您需要对其使用数组访问,即lines.get(0)[0]
是第一行的第一个元素。
请参阅javadoc here。
答案 1 :(得分:4)
Java中的toString
数组类型方法并不特别有意义,除了告诉你这是一个数组。
您可以使用java.util.Arrays.toString
。
或者,如果您的行只包含数字,并且您希望行1,2,3,4...
而不是[1, 2, 3, ...]
,则可以使用:
java.util.Arrays.toString(someArray).replaceAll("\\]| |\\[","")
答案 2 :(得分:2)
此时:
for (String[] s : myEntries) {
System.out.println("Next item: " + s);
}
您需要在一行中加入字符串数组。查看这篇文章: A method to reverse effect of java String.split()?
答案 3 :(得分:0)
你有大约98%的权利。唯一的问题是你正在尝试打印出一个不按照你喜欢的方式打印的String []。相反,试试这个...
for (String[] s : myEntries) {
System.out.print("Next item: " + s[0]);
for(int i = 1; i < s.length; i++) {
System.out.print(", " + s[i]);
}
System.out.println("");
}
这样你就可以访问数组中的每个字符串而不是数组本身。
希望这有帮助!
答案 4 :(得分:0)
String []是一个字符串数组。这样的数组在内部是一个类。与所有未显式扩展其他类的类一样,它会隐式扩展Object。默认情况下,类Object的方法toString()
为您提供了表示形式:类名,后跟@,后跟十六进制的哈希码。由于String []类不会覆盖toString()方法,因此您可以得到它。
创建一些为您输出数组元素的方法。迭代数组并在元素上使用System.out.print()
(不打印* ln *)。
答案 5 :(得分:0)
CSVReader reader = new CSVReader(new FileReader(
"myfile.csv"));
try {
List<String[]> myEntries = reader.readAll();
for (String[] s : myEntries) {
for(String ss : s) {
System.out.print(", " + ss);
}
}
} catch (IOException e) {
e.printStackTrace();
}
答案 6 :(得分:0)
查看String Here的split函数,并使用类似String[] results = input.split("\\s+");
的函数。正则表达式位在空格上,它应该是技巧