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)

これで、そのうちの1つが空の文字列を返します。

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));

引数の 1 つは空の文字列""です。

Integer.parseIntメソッドは、有効な整数を持つ文字列のみを処理できます。例:は有効ですが、有効"1"ではありません。"123"""

于 2012-10-12T05:13:42.377 に答える
0

parseInt への引数の 1 つは"".

Integer.parseInt の Javadoc から:

次のいずれかの状況が発生した場合、NumberFormatException タイプの例外がスローされます。

  1. 最初の引数が null であるか、長さが 0 の文字列です。
  2. 基数が java.lang.Character.MIN_RADIX よりも小さいか、java.lang.Character.MAX_RADIX よりも大きいです。
  3. 文字列の長さが 1 よりも長い場合、最初の文字がマイナス記号 '-' ('\u002D') である可能性があることを除いて、文字列のどの文字も指定された基数の数字ではありません。
  4. 文字列で表される値は int 型の値ではありません。
于 2012-10-12T05:19:20.160 に答える