我有一个文件,其中包含许多电影标题及其年份,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
                }

09-25 21:14