扫描仪仅读取第一个单词而不是行

问题描述 投票:0回答:6

在我当前的程序中,一种方法要求用户输入产品的描述作为

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
只会产生“起泡”。

任何帮助将不胜感激!

java string java.util.scanner
6个回答
28
投票

next()
替换为
nextLine()

String productDescription = input.nextLine();

9
投票

使用

input.nextLine();
代替
input.next();


5
投票

扫描仪的javadocs回答您的问题

扫描器使用分隔符模式将其输入分解为标记, 默认情况下匹配空格。

您可以通过执行类似的操作来更改扫描仪使用的默认空白模式

Scanner s = new Scanner();
s.useDelimiter("\n");

1
投票

input.next() 接受输入字符串的第一个空格分隔的单词。因此,根据设计,它会执行您所描述的操作。尝试一下

input.nextLine()


0
投票

Javadoc 来救援:

扫描器使用分隔符模式将其输入分解为标记, 默认情况下匹配空格

nextLine
可能是您应该使用的方法。


0
投票

您在此线程中看到了两种解决方案:

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();
© www.soinside.com 2019 - 2024. All rights reserved.