我有一个文件,其中包含许多电影标题及其年份,5星评级和时长。我正在尝试读取文件,并将标题,年份,等级和长度存储为变量。我遇到的问题是在检索年份的代码中。代码会编译,但是在运行多年的电影时(例如,列为2006-2009),运行时会引发NumberFormatException。这是我的代码。
while((line = bufferedReader.readLine()) != null) {
//System.out.println(line);
for(int i = 0; i < line.length(); i++)
{
if(line.charAt(i) == ')' || line.charAt(i) == '-')//get year
{
yr = line.substring(yearStart,i);
year = Integer.parseInt(yr);
}
}
System.out.println(year);
}
我的if语句中的
line.charAt(i) == '-'
是否不应该解决此问题?编辑:以下代码是yearStart的来源。
if(line.charAt(i) == '(')//get title
{
title = line.substring(0,i);
yearStart = i+1;
}
该文件的格式如下:
title (year) | rating, length
抱歉,我原本应该包括在内。
编辑2:这是文件一部分的示例,如果有帮助
!Women Art Revolution (2010) | 3 stars, 1hr 22m
#1 Cheerleader Camp (2010) | 3 stars, 1hr 35m
$5 a Day (2008) | 3.4 stars, 1hr 37m
'night, Mother (1986) | 3.7 stars, 1hr 36m
'Til Death (2006-2009) | 3.7 stars, 4 Seasons//This is the one that causes the error
@Suicide Room (2011) | 3.4 stars, 1hr 51m
... And God Spoke (1993) | 2.8 stars, 1hr 22m
最佳答案
找到年份后会怎样?循环将一直运行到该行的末尾,并在每次找到)
或-
时尝试将其解析为数字。
找到年份后,也许应该退出循环。
if(line.charAt(i) == ')' || line.charAt(i) == '-')//get year
{
yr = line.substring(yearStart,i);
year = Integer.parseInt(yr);
break; // year found, no point in looping more
}
或者,也许您应该重置
yearStart
索引,以便可以分析第二年。 if (line.charAt(i) == '-')
{
// parse first year
yr = line.substring(yearStart,i);
year = Integer.parseInt(yr);
yearStart = i + 1; // reset to parse second year
}
else if (line.charAt(i) == ')')
{
yr = line.substring(yearStart,i);
year = Integer.parseInt(yr);
break; // year found
}