我一直在尝试解析我从CSV文件中获取的字符串并转换列#34; start"到小时。这是我的代码:
public class BeerSong {
private static final String csvFileName = "HourList201403.csv";
public static void main (String[] args) throws IOException, java.text.ParseException {
CSVReader csvReader = new CSVReader(new FileReader(csvFileName));
List<String[]>allLine = csvReader.readAll();
SimpleDateFormat start = new SimpleDateFormat("HH:mm");
Calendar calendar = GregorianCalendar.getInstance();
int startH;
Date startHour;
for (String[] line : allLine) {
startHour=start.parse(line[3]);
calendar.setTime(startHour);
startH = calendar.get(Calendar.HOUR);
System.out.println(line[3]+", "+line[4]);
System.out.println("Work: "+startH);
}
}
}
当我尝试运行时,它会输出错误:
线程中的异常&#34; main&#34; java.text.ParseException:无法解析的日期:&#34;开始&#34;
那么,我在这里做错了什么以及如何解决这个问题?
CSV格式是这样的,它有很多行,所以我在这里放了一些:
Person Name, Person ID, Date, Start, End
Scott Scala, 2, 2.3.2014, 6:00, 14:00
Janet Java, 1, 3.3.2014, 9:30, 17:00
Scott Scala, 2, 3.3.2014, 8:15, 16:00
Larry Lolcode, 3, 3.3.2014, 18:00, 19:00
答案 0 :(得分:2)
尝试解析字符串时会抛出java.text.ParseException
&#34;开始&#34;作为Date
。
显然,这是电子表格的标题,因此您应跳过第一行(请注意索引1):
for (int i = 1; i < allLine.size(); i++) {
请注意,您需要第3列中的其他字段始终为格式HH:mm
,即不为空等。
这里的技巧是使用快速枚举和跳过第一行,或者如上所示,使用从索引int
开始的基于1
的迭代(集合从0开始,这样就可以跳过第一项。
答案 1 :(得分:2)
您遍历循环中的所有已解析行。第一行是:
Person Name, Person ID, Date, Start, End
。所以你想要读出的第4项:
startHour=start.parse(line[3]);
是Start
。我想你必须跳过循环中的第一行:
for(int i = 1; i < allLine.size(); i++){
String[] line = allLine.get(i);