我有一个问题。这两个都不适用于我的代码。
使用运行此代码时
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个令牌组成:[Root
、Beer
、Hello
、World
、5
]。您想要的是,这形成3个令牌:[Root Beer
、Hello World
、5
]。
很简单:告诉扫描仪你打算用换行符来分隔,而不仅仅是空白:
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
注意:空白的确切数量。