0

このコード スニペットを試してみましたが、この例外の理由を特定できませんでした。

私のコードは:-

import java.util.*;
class ScannerTest
{
 public static void main(String[]args)
  {
    String csv = "Sue,5,true,3";
    Scanner sc = new Scanner(csv);
    sc.useDelimiter(",");
    int age = sc.nextInt();
    System.out.println(age);
  }
}

出力は次のとおりです:-

Exception in thread "main" java.util.InputMismatchException
    at java.util.Scanner.throwFor(Unknown Source)
    at java.util.Scanner.next(Unknown Source)
    at java.util.Scanner.nextInt(Unknown Source)
    at java.util.Scanner.nextInt(Unknown Source)

私はJavaが初めてなので、この例外の理由を知るのを手伝ってください。

4

3 に答える 3

4

javadoc の例では、それがどのように機能するかを確認できます。

String input = "1 fish 2 fish red fish blue fish";
     Scanner s = new Scanner(input).useDelimiter("\\s*fish\\s*");
     System.out.println(s.nextInt());
     System.out.println(s.nextInt());
     System.out.println(s.next());
     System.out.println(s.next());
     s.close(); 

最初のトークンは文字列です。next int を使用すると、整数が期待されます。次のようなものを使用することをお勧めします (csv の構造を知っていて、変更されないという条件の下で):

public static void main(String[]args)
      {
        String csv = "Sue,5,true,3";
        Scanner sc = new Scanner(csv);
        sc.useDelimiter(",");
        sc.next();
        int age = sc.nextInt();
        System.out.println(age);
      }

また

public static void main(String[] args) {
        String csv = "Sue,5,true,3";
        String ageString = csv.split(",")[1];
        System.out.println(ageString);
    }

...

文字列を int に解析するには:

int age = Integer.parseInt(ageString);
于 2012-08-04T11:41:42.597 に答える
3

Scanner 状態の nextIntメソッドのJavadoc

入力の次のトークンを int としてスキャンします。以下で説明するように、次のトークンを有効な int 値に変換できない場合、このメソッドは InputMismatchException をスローします。変換が成功すると、スキャナは一致した入力を超えて進みます。

最初のトークンは文字列なので、これが起こっていることです。ほとんどの場合、CSV では何が表示されるかがわかります。それらを 1 つずつ読むか、hasNextIntメソッドとその仲間を使用して、期待するものが実際に存在するかどうかを確認する必要があります。

于 2012-08-04T11:39:31.727 に答える
1

スキャナは整数型を予期していますが、最初のトークンは文字列です -"Sue"修正するには、次の場所に配置します:

sc.next(); // skip "Sue"

String トークンを消費するために nextInt() を呼び出す前。

于 2012-08-04T11:38:29.510 に答える