读取csv文件,但空字符串[]

时间:2018-05-22 22:13:32

标签: java csv

在下面的代码中,您可以看到我如何阅读csv文件。但是,if(!splitter2[0].equals(""))似乎不起作用。在文件的最后3行中有许多分号(csv的分隔符是分号)。然而,不知何故,它认为它不是空的。 BTW,.equals(";")也不起作用。无论如何,它似乎经历了这个if语句,因为我仍然得到了超出范围的异常(删除分号将解决异常并且我已经尝试在while循环之外打印某些内容并且不能使用这些行)

  

;;; ;;; ;;; ;;; ;;; ;;; ;;; ;;; ;;;

while((line2 = bra.readLine()) != null) {

    //splits the lines in the file
    String[] splitter2 = line2.split(tomtomkm.cvsSplitBy); 
    Files.lines(Paths.get("", tomtomkm.fileverschil), Charset.forName("ISO-8859-1"));

    //adding everything to lists
    if(!splitter2[0].equals("")) {
        dateList.add(splitter2[0]);
        licenseverschiList.add(splitter2[1]);
        firstnameList.add(splitter2[2]);
        lastnameList.add(splitter2[3]); 
        System.out.println(dateList.size() + " en " + licenseverschiList.size() + "en " + firstnameList.size() + " en " + lastnameList.size());         
    } 
}

解决 面对同样问题的每个人: 在分割线之前创建一个if语句。不知道为什么,但它确实有效。

if(!line2.contains(";;")) { 
   then split it

}

2 个答案:

答案 0 :(得分:0)

如果您阅读JavaDoc for String.split() that only takes one argument,您会看到它会抑制分割后获得的空字符串尾随。

对于只有分号的行,拆分它们只产生空字符串,因此一切都是空的尾随字符串,而split()返回一个长度为零的数组,也就是说你不能访问任何元素因为它没有。这就是splitter2[0]生成数组索引超出范围异常的原因。

您可以根据自己的意愿进行调整。通过测试数组的长度而不是检查其可能不存在的第一个元素。或者使用line2.split(";", -1)来停用尾随空字符串的抑制,这样就可以访问行的所有字段,无论它们是否为空。

答案 1 :(得分:0)

抛出

let filePath = documentsURL.appendingPathComponent("temp.mov") 是因为您调用了ArrayIndexOutOfBoundException方法 在.equals("")的{​​{1}}元素上,但splitter2[0]返回splitter2,这意味着splitter2.length没有元素。

原因是如果您运行以下代码

0

您将获得一系列splitter2元素。

但如果你跑

String test = ";;;";    
String[] split = test.split(";"); //split.length is zero

您将获得一个0元素数组:第一个元素是空字符串,第二个元素是String test = ";Hello;;"; String[] split = test.split(";");