繁体   English   中英

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

[英]Why do I get a numberformatexception when I try to parse this specific string to an int?

我正在为我的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;
   }

如果这不是足够的信息,我深表歉意,因为我是这个网站的新手。

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

谢谢。

好吧,我看到的最明显的东西是制表符是\\ 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]));

正如JavaDoc所说

public class NumberFormatException extends IllegalArgumentException

引发以指示应用程序已尝试将字符串转换为数字类型之一,但是该字符串没有适当的格式。

由于String[] tokens = s.split("/t"); 行不会以表格形式拆分,因为\\t是表格形式而不是/t因此字符串未拆分,并且您得到NumberFormatException

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

str.split( “\\ S +”)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM