无法弄清楚java的这段代码片段中的异常

时间:2012-08-04 11:34:33

标签: java

我已尝试过此代码段,但无法找出导致此异常的原因。

我的代码是: -

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的新手,所以请帮助我知道这个例外的原因。

3 个答案:

答案 0 :(得分: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);

答案 1 :(得分:3)

扫描程序的Javadoc of the nextInt方法说明

  

将输入的下一个标记扫描为int。这个方法会抛出   InputMismatchException如果下一个标记无法转换为   有效的int值如下所述。如果翻译成功,   扫描仪超过匹配的输入。

由于你的第一个令牌是一个字符串,这就是正在发生的事情。与CSV中的大多数情况一样,您将知道将要呈现的内容,您应该逐一阅读它们,和/或使用hasNextInt方法及其朋友来检查您的期望是否实际存在。

答案 2 :(得分:1)

扫描程序需要一个整数类型,但第一个标记是一个字符串 - "Sue",要修复,放置:

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

在调用nextInt()之前使用String标记。