next() 不允许"white space"和 nextLine() 一起跳过"sodaType"



我有一个问题。这两个都不适用于我的代码。

使用运行此代码时

sodaType=keyboard.next((;

userInput(代码中称为sodaType(只保存";Root Beer";,输出("根"(。

我在谷歌上搜索了这个问题和

sodaType=keyboard.nextLine((;

允许";"空白";,但是跳过userInput,不输出任何内容,跳过if语句。

我在这个网站上找到了不同的答案

  • 如何让Java注册一个带有空格的字符串输入
  • 用户输入无法使用键盘.nextLine((和String(Java(
  • 扫描仪没有';t see after space

我很困惑为什么nextLine((对他们有效,以及我应该如何继续。

while(true) {
System.out.println("Please enter a brand of soda. ");
System.out.print("You can choose from Pepsi, Coke, Dr. Pepper, or Root Beer: ");
sodaType = keyboard.next();
System.out.println("sodatype" + sodaType);
if (sodaType.equalsIgnoreCase("pepsi") || sodaType.equalsIgnoreCase("coke") || 
sodaType.equalsIgnoreCase("dr pepper") || sodaType.equalsIgnoreCase("dr. pepper") || 
sodaType.equalsIgnoreCase("root beer")) 
{
System.out.println("you chose " +  sodaType);
break;
}
else {
System.out.println("Please enter an avaiable brand of soda. ");
}
}

这是因为扫描仪的工作方式是将输入分隔为一系列"标记"one_answers"分隔符"。开箱即用,"一个或多个空白字符"是分隔符,因此,的输入

Root Beer
Hello World
5

由5个令牌组成:[RootBeerHelloWorld5]。您想要的是,这形成3个令牌:[Root BeerHello World5]。

很简单:告诉扫描仪你打算用换行符来分隔,而不仅仅是空白:

Scanner s = new Scanner(System.in);
s.useDelimiter("r?n");

这是一个正则表达式,无论操作系统如何,它都将匹配换行符。

nextLine()与扫描仪中的任何其他下一种方法混合会导致疼痛和痛苦,所以,不要这样做。忘记存在nextLine。

因此,当您编写.next()时,此函数读取String并读取,直到遇到white space
因此,如果您编写此函数并将输入作为root beer,它将只读root,因为在root之后会有一个white space告诉java停止读取,因为用户可能想要结束读取。

sodaType = keyboard.next();

这就是.nextLint()被引入的原因,因为它将读取包括white spaces的整行。因此,当您编写并提供类似root beer的输入时

sodaType = keyboard.nextLine();

它会将其存储为root beer
,如果您将输入作为root beer,它会将它存储为root beer
注意:空白的确切数量。

相关内容

  • 没有找到相关文章

最新更新