在我当前的程序中,一种方法要求用户输入产品的描述作为
String
输入。但是,当我稍后尝试打印此信息时,仅显示 String
的第一个单词。这可能是什么原因造成的?我的方法如下:
void setDescription(Product aProduct) {
Scanner input = new Scanner(System.in);
System.out.print("Describe the product: ");
String productDescription = input.next();
aProduct.description = productDescription;
}
因此,如果用户输入是“橙味起泡苏打水”,则
System.out.print
只会产生“起泡”。
任何帮助将不胜感激!
使用
input.nextLine();
代替 input.next();
扫描仪的javadocs回答您的问题
扫描器使用分隔符模式将其输入分解为标记, 默认情况下匹配空格。
您可以通过执行类似的操作来更改扫描仪使用的默认空白模式
Scanner s = new Scanner();
s.useDelimiter("\n");
input.next() 接受输入字符串的第一个空格分隔的单词。因此,根据设计,它会执行您所描述的操作。尝试一下
input.nextLine()
。
您在此线程中看到了两种解决方案:
nextLine()
和useDelimiter
,但是第一个解决方案仅在您只有一个输入时才有效。以下是使用它们的完整步骤。
nextLine()
正如 @rzwitserloot 提到的,如果
.next()
子例程在 nextLine()
调用之前,这将会失败。要解决此问题,请在顶部定义 .nextLine()
子例程以忽略空白字符。
Scanner = stdin = new Scanner(System.in);
stdin.nextLine(); // consume white-space character
// Now you can use it as required.
String name = stdin.nextLine();
String age = stdin.nextInt();
useDelimiter()
您可以将 Scanner 类的默认空白分隔符更改为换行符。
Scanner = stdin = new Scanner(System.in).useDelimiter("\n");
String name = stdin.nextLine();
String age = stdin.nextInt();