【发布时间】:2016-11-06 22:26:47
【问题描述】:
我正在研究这种从 csv 文件中获取数据并将它们存储到数组中的方法。我编译的代码但每个数组的值都是“null”。我不知道为什么会这样。
csv 文件看起来像这样,但持续了 91 行:
2016 年 9 月 1 日星期日,,,,,16:00,20:00
星期一,9/2/2016,8:00,12:00,,,,
星期二,9/3/2016,8:00,12:00,12:00,16:00,,
星期三,9/4/2016,,,,,16:00,20:00
星期四,9/5/2016,8:00,12:00,,,,
星期五,9/6/2016,,,12:00,16:00,,
星期六,9/7/2016,,,,,16:00,20:00
public static void getData() throws FileNotFoundException {
File timeSheets = new File("timeSheets.csv");
Scanner ts = new Scanner(timeSheets);
int n = 0, c = 0;
String temp;
while (ts.hasNext()) {
temp = ts.nextLine();
c++;
}
String[] field = new String[8];
String[] day = new String[c];
String[] date = new String[c];
Integer[] morn = new Integer[c];
Integer[] after = new Integer[c];
Integer[] night = new Integer[c];
while (ts.hasNext()) {
temp = ts.nextLine();
field = temp.split(",");
day[n] = field[0];
date[n] = field[1];
if (field[4].equals("")) {
morn[n] = 0;
} else {
morn[n] = (int) (Double.parseDouble(field[4].replace(":", "."))
- Double.parseDouble(field[3].replace(":", ".")));
}
if (field[6].equals("")) {
after[n] = 0;
} else {
after[n] = (int) (Double.parseDouble(field[6].replace(":", "."))
- Double.parseDouble(field[5].replace(":", ".")));
}
if (field[8].equals("")) {
night[n] = 0;
} else {
night[n] = (int) (Double.parseDouble(field[8].replace(":", "."))
- Double.parseDouble(field[7].replace(":", ".")));
}
n++;
}
System.out.print(day.length);
System.out.println();
for (int i = 0; i < day.length; i++) {
System.out.println(day[i]);
}
ts.close();
}
【问题讨论】:
-
您在第一个 while 循环中耗尽了所有行 - 所以当第二个循环开始时什么都没有留下...您可以在第二个循环之前添加一个
ts = new Scanner(timeSheets);。但是为了获取数组的大小而读取文件两次是非常低效的......
标签: java