在Java中将子字符串转换为Int

时间:2012-10-12 05:11:24

标签: java list arraylist int substring

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)

3 个答案:

答案 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类型的异常:

  1. 第一个参数为null或为长度为零的字符串。
  2. 基数小于java.lang.Character.MIN_RADIX或大于java.lang.Character.MAX_RADIX。
  3. 字符串的任何字符都不是指定基数的数字,除非第一个字符可能是减号' - '('\ u002D'),前提是该字符串长度超过长度为1.
  4. 字符串表示的值不是int类型的值。