问题是这样的:

我有两个程序从控制台以不同方式获取输入:
1)

Scanner input = new Scanner(System.in);
    int temp1 = input.nextInt();
    input.nextLine();
    String str = input.nextLine();
    int temp2 = Integer.parseInt(str);
    int total = temp1+temp2;

    System.out.println(total);

2)
 Scanner input = new Scanner(System.in);
    int temp1 = input.nextInt();
 // input.nextLine();
    String str = input.nextLine();
    int temp2 = Integer.parseInt(str);
    int total = temp1+temp2;

    System.out.println(total);

在第一种情况下1在2条不同的线中进行输入,例如
1
2

因此它给出了正确的答案,但是在第二种情况下,我删除了input.nextLine()语句以在单行中接受输入,例如:
1 2

它给我数字格式异常的原因是什么?并建议我如何从控制台的一行读取整数和字符串。

最佳答案

问题在于str的值为" 2",并且前导空格不是parseInt()的合法语法。在解析为str之前,您需要跳过输入中两个数字之间的空格或修剪int的空格。要跳过空格,请执行以下操作:

input.skip("\\s*");
String str = input.nextLine();

要在解析之前修剪str的空间,请执行以下操作:
int temp2 = Integer.parseInt(str.trim());

您也可以看中一口气阅读这两行内容:
if (input.findInLine("(\\d+)\\s+(\\d+)") == null) {
    // expected pattern was not found
    System.out.println("Incorrect input!");
} else {
    // expected pattern was found - retrieve and parse the pieces
    MatchResult result = input.match();
    int temp1 = Integer.parseInt(result.group(1));
    int temp2 = Integer.parseInt(result.group(2));
    int total = temp1+temp2;

    System.out.println(total);
}

07-24 14:43