Java Scanner通过读取带空格的字符串来忽略下一个问题

时间:2015-03-12 01:24:40

标签: java java.util.scanner next

我的扫描仪有问题。我希望程序读取字符串和整数。我有两种不同的情况。例如,我的程序要求用户输入出生年份,全名和城市。

Scanner input = new Scanner(System.in);
int year;
String name;
String city;
String state;

System.out.print("Please enter the year of birth to add: ");
year = input.nextInt();

System.out.print("Please enter full name to add: ");
name = input.nextLine();

System.out.print("Please enter a city to add: ");
city = input.nextLine();

System.out.println("Please enter the state to add: );
state = input.next();

输出:

Please enter the year of birth to add: 22
Please enter full name to add: Please enter a city to add: Denver

第一种情况是程序跳过问题并询问下一个问题。没有nextLine,它将收到异常。

对于第二种情况,假设城市有两个或更多空间(例如旧金山,纽约市......),nextLine是否有帮助?它似乎与第一种情况类似。我知道nextLine将读取带空格的字符串,但是它仍会导致问题。我无法解决这个问题。

1 个答案:

答案 0 :(得分:2)

尝试:

input.nextLine();   //this is totally useless and just eats up the rest of the line

在nextInt()之后和nextLine()之前。它有效。

<强>问题: 在您的代码中,它完全按照您的说法执行操作。它接受整数然后继续到nextLine()。这是相同行。 nextInt()不会自动进入下一行。因此,您可以使用nextLine()来吃掉终点线。

<强>解决方案: sc.nextInt()会占用整数,但不会占用新行。如果你选择下一行(与nextInt()相同),它将继续下一行的真实信息,而不是跳过一个问题。

输出:

Please enter the year of birth to add: 199
Please enter full name to add: 1234
Please enter a city to add: 1235123
Please enter the state to add: 1234123

希望这有帮助。