【发布时间】:2021-11-19 23:14:12
【问题描述】:
我正在尝试从 CSV 文件中提取数据,其中有以下示例 CSV
timestamp, Column1,column2,column3
2019-05-07 19:17:23,x,y,z
2019-03-30 19:41:33,a,b,c
etc.
目前,我的代码如下:
public static void main(String[]args){
String blah = "file.csv";
File file = new File(blah);
try{
Scanner iterate = new Scanner(file);
iterate.next(); //skips the first line
while(iterate.hasNext()){
String data = iterate.next();
String[] values = data.split(",");
Float nbr = Float.parseFloat(values[2]);
System.out.println(nbr);
}
iterate.close();
}catch (FileNotFoundException e){
e.printStackTrace();
}
}
但是,我的代码给了我一个错误
java.lang.ArrayIndexOutOfBoundsException: Index 3 is out of bounds for length 3
我的理论是分裂是这里的问题。由于没有逗号,我的程序认为数组仅以第一个元素结尾,因为第一个元素上没有逗号(我已经用时间戳列对其进行了测试,它似乎可以工作,但是,我想打印这些值在第 3 列)
如何使用 split 函数获取 column1、column2 和 column3 的值?
【问题讨论】:
-
在打印之前放置一个
if (values.length > 2)检查以防止错误如何?或者在调试器中运行您的代码以查看问题所在? -
另外,我认为你想要
.nextLine()和.hasNextLine(),否则,你会读到空格或行尾字符之前 -
你的代码没有像你提到的那样工作,你提到的运行没有得到日期,只是时间,正如早期评论中提到的那样(使用
.nextLine()。也不清楚是什么是Float nbr = Float.parseFloat(values[2]);的意图请澄清 -
我希望 column3 是一个浮点值,以便在以后的操作中使用。目前,我仍在使用 print 语句进行调试,因此 parsefloat 目前相对无关紧要。
-
如果这不是家庭作业,请不要重新发明轮子:commons.apache.org/proper/commons-csv/index.html。无论如何,您的示例列是一个字符。可能您正在使用逗号作为小数分隔符 (?) 的浮点数。
标签: java csv java.util.scanner