从控制台的单行读取整数和字符串

时间:2014-09-03 14:22:18

标签: java console java.util.scanner

问题是这样的:

我有两个程序从控制台获取输入,但方式不同: 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

它给我数字格式异常为什么?并且还建议我如何从控制台的单行读取整数和字符串。

3 个答案:

答案 0 :(得分:1)

假设输入为1 2,则在此行之后

String str = input.nextLine();

str等于" 2",因此无法将其解析为int。

你可以做到:

int temp1 = input.nextInt();
int temp2 = input.nextInt();
int total = temp1+temp2;
System.out.println(total);

答案 1 :(得分:1)

问题是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);
}

答案 2 :(得分:0)

在你的下一行中没有整数...它试图从null创建和整数...因此你得到数字格式异常。如果在temp1上使用split string,则会获得值为1和2的2个字符串。