阻止用户在Java中输入空格

Spn*_*Spn 4 java

我希望用户只输入他的年龄.所以我做了这个程序:

Scanner keyb = new Scanner(System.in);  
int age;

while(!keyb.hasNextInt())
{
    keyb.next();
    System.out.println("How old are you ?");
}

age = keyb.nextInt();
System.out.println("you are" + age + "years old");
Run Code Online (Sandbox Code Playgroud)

我发现如何通过使用带有keyb.hasNextInt()的while循环来阻止用户使用字符串,但是如何阻止他使用空格或输入比他的年龄更多的输入?

例如,我想阻止这种打字"12米"或"12 12"

另外,如何清除缓冲区中的所有现有数据?当我尝试使用它时,我面临无限循环:

while(keyb.hasNext())
  keyb.next();
Run Code Online (Sandbox Code Playgroud)

Mur*_*göz 7

你想得到整条线.使用nextLine并检查数字,例如

String possibleAge = "";
do {
    System.out.println("How old are you ?");
    possibleAge = keyb.nextLine();
} while (!possibleAge.matches("\\d+"))
Run Code Online (Sandbox Code Playgroud)

  • @ OleV.V.没关系,我是个白痴.我一直对反直觉的Scanner的行为感到惊讶.难怪它吸引了这么多初学者. (3认同)
  • @Spn`"\\ d +"`是一个正则表达式.它基本上是检查String是否匹配某种模式/格式.在这种情况下,`\\ d`表示数字(所以`0-9`)."+"表示1个或更多.因此,它检查用户输入的行是否正好是1位或更多位,而不是其他任何数字.小记(虽然现在可能有点过于先进,但主要是为其他读者添加):`String#matches`添加一个隐含的前导`^`和尾随`$`来正则表达式检查整个String. (2认同)