0
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)
4

3 回答 3

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);
}
于 2012-10-12T05:24:29.307 回答
0

那是运行时异常,而不是编译器错误。

问题出现在以下行之一 -

 int hardCover = Integer.parseInt(aBook.substring(51, 55).trim()); 
 int paperBack = Integer.parseInt(aBook.substring(56));

一个参数是一个空字符串""

Integer.parseInt方法只能处理具有有效整数的字符串。例如"1""123"很好,但""无效。

于 2012-10-12T05:13:42.377 回答
0

parseInt 的参数之一是"".

来自 Integer.parseInt 的 Javadoc:

如果发生以下任何一种情况,则会引发 NumberFormatException 类型的异常:

  1. 第一个参数为空或长度为零的字符串。
  2. 基数小于 java.lang.Character.MIN_RADIX 或大于 java.lang.Character.MAX_RADIX。
  3. 字符串的任何字符都不是指定基数的数字,除非第一个字符可能是减号“-”(“\u002D”),前提是该字符串的长度大于 1。
  4. 字符串表示的值不是 int 类型的值。
于 2012-10-12T05:19:20.160 回答