我正在编写一个程序来检查前两行(不包括标题)是否包含任何数据。如果不这样做,则忽略该文件,如果前两行中的任何一行包含数据,则处理该文件。我正在使用OpenCSV将标题,第一行和第二行检索到3个不同的数组中,然后根据我的要求检查它们。我的问题是,即使前两行是空的,reader
也会返回类似[Ljava.lang.String;@13f17c9e
的内容作为第一行和/或第二行的输出(取决于我的测试文件)。
除了null
之外,为什么它会返回任何内容?
答案 0 :(得分:1)
我现在不在我的电脑上,所以请原谅任何错误~OpenCSV API Javadocs相当简短,但似乎并没有多少。读取一行应该将内容解析为一个字符串数组。一个空行应该会产生一个空字符串数组,如果你试图将它打印出来,它会提供类似[Ljava.lang.String;@13f17c9e
的内容......
我假设以下示例文件:
1 |
2 |
3 | "The above lines are empty", 12345, "foo"
如果您执行myCSVReader.readAll(),将生成以下内容
// List<String[]> result = myCSVReader.readAll();
0 : []
1 : []
2 : ["The above lines are empty","12345","foo"]
要执行您在问题中描述的内容,请测试长度而不是某种空检查或字符串比较。
List<String> lines = myCSVReader.readAll();
// lets print the output of the first three lines
for (int i=0, i<3, i++) {
String[] lineTokens = lines.get(i);
System.out.println("line:" + (i+1) + "\tlength:" + lineTokens.length);
// print each of the tokens
for (String token : lineTokens) {
System.out.println("\ttoken: " + token);
}
}
// only process the file if lines two or three aren't empty
if (lineTokens.get(1).length > 0 || lineTokens.get(2).length > 0) {
System.out.println("Process this file!");
processFile(lineTokens);
}
else {
System.out.println("Skipping...!");
}
// EXPECTED OUTPUT:
// line:1 length:0
// line:2 length:0
// line:3 length:3
// token: The above lines are empty
// token: 12345
// token: foo
// Process this file!