List<Book> myLibrary = new ArrayList <Book>(312);
public BookLibrary (Scanner inFile){
while(inFile.hasNextLine()){
String aBook = inFile.nextLine();
String title = aBook.substring(0, 32).trim();
String language = aMovie.substring(33, 40).trim();
String rating = aMovie.substring(41, 50).trim();
int hardCover = Integer.parseInt(aBook.substring(51, 55).trim());
int paperBack = Integer.parseInt(aBook.substring(56));
myLibrary.add(new Book (title, language, rating,
hardCover, paperBack));
count++;
}
这里只是一些示例代码。我试图弄清楚为什么我在尝试运行程序时收到此运行时错误。我的程序中没有编译器错误。
Exception in thread "main" java.lang.NumberFormatException: For input string: ""
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at MovieCollection.<init>(BookLibrary.java:21)
答案 0 :(得分:1)
文件格式错误(某些值丢失)或索引中的错误(子串方法的参数)更正此方法调用适当的:
substring(51, 55)
substring(56)
现在其中一个返回一个空字符串。
如果hardCower或papperBack可以为空,请使用 try / catch 构建:
int hardCover = 0;
int paperBack = 0;
try{
hardCover = Integer.parseInt(aBook.substring(51, 55).trim());
}catch(NumberFormatException nfe){}
try{
paperBack = Integer.parseInt(aBook.substring(56));
}catch(NumberFormatException nfe){}
或进行检查
String toInt1 = aBook.substring(51, 55).trim();
if(toInt1.length > 0){
hardCover = Integer.parseInt(toInt1);
}
答案 1 :(得分:0)
这是运行时异常,而不是编译器错误。
问题出现在以下某一行 -
int hardCover = Integer.parseInt(aBook.substring(51, 55).trim());
int paperBack = Integer.parseInt(aBook.substring(56));
一个参数是空字符串""
。
Integer.parseInt
方法只能处理带有效整数的字符串。例如"1"
,"123"
很好,但""
无效。
答案 2 :(得分:0)
parseInt的一个参数是""
。
来自Integer.parseInt的Javadoc:
如果发生以下任何一种情况,则抛出NumberFormatException类型的异常: