[英]Why do I get NumberFormatException while converting String Array to int Array?
[英]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.