当我尝试将此特定字符串解析为int时,为什么会出现numberformatexception?

时间:2015-03-18 05:58:26

标签: java parsing int token numberformatexception

当我遇到这个错误时,我正在为我的AP计算机科学课程开发一个允许用户对音乐进行排序的项目。当行, "2008 50 Ashley Tisdale He Said, She Said"(每个部分通过标签分隔) 通过输入文件输入,我的程序无法正确响应并给了我这些错误

at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    at java.lang.Integer.parseInt(Integer.java:580)
    at java.lang.Integer.parseInt(Integer.java:615)
    at Song.parse(Song.java:19)
    at GazillionSongs.main(GazillionSongs.java:44)

看到这个后,我得出结论,我的错误来自这段代码。

ArrayList<String> lines = new ArrayList<String>();

         while (inFile.hasNextLine()) {
            String line = inFile.nextLine();
            lines.add(line);  
         }

         ArrayList<Song> songs = new ArrayList<Song>();

         Scanner allCommands = new Scanner(command);

         for(int i = 0; i < lines.size(); i++) {
            int year = 0;
            int rank = 0;
            String artist = "";
            String title = "";
            Song song = new Song(year, rank, artist, title);
            song.parse(lines.get(i));
            songs.add(song);
         }

这个,来自我的宋课。

public Song(int year, int rank, String artist, String title) {
      this.year = year;
      this.rank = rank;
      this.artist = artist;
      this.title = title;
   }

public static Song parse(String s) {
      String[] tokens = s.split("/t");
      year = Integer.parseInt(tokens[0]);
      rank = Integer.parseInt(tokens[1]);
      artist = tokens[2];
      title = tokens[3];
      Song song = new Song(year, rank, artist, title);
      return song;
   }

如果这还不够,我很抱歉,因为我是这个网站的新手。

有人可以解释我为什么会收到这些错误吗?

感谢。

3 个答案:

答案 0 :(得分:2)

嗯,我看到的最明显的事情是,制表师是\ t,而不是/ t。以下代码按预期工作:

String s = "2008    50  Ashley  Tisdale He  Said,   She Said";
String[] tokens = s.split("\t");
System.out.println(Integer.parseInt(tokens[0]));
System.out.println(Integer.parseInt(tokens[1]));

答案 1 :(得分:0)

正如JavaDoc所说

  

public class NumberFormatException extends IllegalArgumentException

     

抛出以指示应用程序已尝试转换a   字符串到其中一个数字类型,但字符串没有   适当的格式。

由于String[] tokens = s.split("/t");行不会拆分表格,因为\t表格不是/t因此字符串没有被拆分而你得到NumberFormatException

答案 2 :(得分:0)

你的正则表达式问题。 在split api中使用以下正则表达式,它将根据字符串之间的空格进行拆分。

  

str.split(&#34; \ S +&#34)