问题是这样的:
我有两个程序从控制台以不同方式获取输入:
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);
}