在下面的代码中,您可以看到我如何阅读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
}
答案 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(";");
。