即使CSV行中没有值,OpenCSV也会返回一个字符串

时间:2013-04-03 22:27:58

标签: java arrays string csv opencsv

我正在编写一个程序来检查前两行(不包括标题)是否包含任何数据。如果不这样做,则忽略该文件,如果前两行中的任何一行包含数据,则处理该文件。我正在使用OpenCSV将标题,第一行和第二行检索到3个不同的数组中,然后根据我的要求检查它们。我的问题是,即使前两行是空的,reader也会返回类似[Ljava.lang.String;@13f17c9e的内容作为第一行和/或第二行的输出(取决于我的测试文件)。

除了null之外,为什么它会返回任何内容?

1 个答案:

答案 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!