我无法弄清楚" Java InputMismatchException错误"在我的代码中

时间:2015-12-12 14:08:36

标签: java java.util.scanner inputmismatchexception

在我的代码中,我使用" \ n"作为分隔符,因为可能有一些“sapce”。在用户的输入字符串中。但是出现了一个例外。我是Java新手,我很困惑。所以我非常感谢你帮助我。

我的代码是:

import java.util.Scanner;

public class ScannerDemo {
    public static void main(String[] args) {

        Scanner scanner=new Scanner(System.in);
        scanner.useDelimiter("\n");

        System.out.print("Please enter your ID:");
        int id=scanner.nextInt();
        System.out.print("Please enter your address:");
        String address=scanner.next();
    }

}

输出:

Please enter your ID:20151212
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)
    at learning.ScannerDemo.main(ScannerDemo.java:12)

4 个答案:

答案 0 :(得分:1)

如果您仍想使用['More text']作为分隔符,只需将修剪后的文字投射出去。

解决方案

['Text 1', 'Text 2', 'Text 3']

或者只是摆脱分隔符。

答案 1 :(得分:0)

设置分隔符会导致问题 - nextInt会查找" \ n"作为预期格式的一部分,但扫描仪已经消耗了它。

如果你想要一个更加终端用户友好的方法,你可能最好扫描下一个字符串,修剪它并自己将其转换为Integer。

答案 2 :(得分:0)

使用scanner.nextLine()然后trim()并转换为int。

答案 3 :(得分:0)

由于行终止符因操作系统而异。

  • Windows系统使用" \ r \ n"
  • Linux系统使用" \ n"

因此,如果您在Windows上运行代码,则应使用" \ r \ n"作为分隔符。 但是java提供了更好的选择。

  type Args = [number, string, string];
  const _load = new Rx.Subject<Args>();
  const _loadCount = _load.scan(count => count + 1, 0);
  const _loadWithCount = Rx.Observable.zip(_load, _loadCount,
    (args, count) : Args => [count, args[1], args[2]]
  );

所以你应该使用

System.getProperty("line.separator");