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

发布于 2024-12-12 17:51:55 字数 452 浏览 1 评论 0原文

在我当前的程序中,一种方法要求用户以 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 只会产生“起泡”。

任何帮助将不胜感激!

In my current program one method asks the user to enter the description of a product as a String input. However, when I later attempt to print out this information, only the first word of the String shows. What could be the cause of this? My method is as follows:

void setDescription(Product aProduct) {
    Scanner input = new Scanner(System.in);
    System.out.print("Describe the product: ");
    String productDescription = input.next();
    aProduct.description = productDescription;
}

So if the user input is "Sparkling soda with orange flavor", the System.out.print will only yield "Sparkling".

Any help will be greatly appreciated!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

狼亦尘 2024-12-19 17:51:55

替换 next()nextLine()

String productDescription = input.nextLine();

Replace next() with nextLine():

String productDescription = input.nextLine();
剪不断理还乱 2024-12-19 17:51:55

使用 input.nextLine(); 而不是 input.next();

Use input.nextLine(); instead of input.next();

脱离于你 2024-12-19 17:51:55

Scanner 的 javadocs 回答了您的问题

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

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

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

The javadocs for Scanner answer your question

A Scanner breaks its input into tokens using a delimiter pattern,
which by default matches whitespace.

You might change the default whitespace pattern the Scanner is using by doing something like

Scanner s = new Scanner();
s.useDelimiter("\n");
会发光的星星闪亮亮i 2024-12-19 17:51:55

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

input.next() takes in the first whitsepace-delimited word of the input string. So by design it does what you've described. Try input.nextLine().

失去的东西太少 2024-12-19 17:51:55

Javadoc 来救援:

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

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

Javadoc to the rescue :

A Scanner breaks its input into tokens using a delimiter pattern,
which by default matches whitespace

nextLine is probably the method you should use.

还给你自由 2024-12-19 17:51:55

您在此线程中看到了两种解决方案: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();

There are two solutions as you've seen in this thread: nextLine() and useDelimiter, however the first one will only work when you have just one input. Here are the complete steps to use both of them.

Using nextLine()

As @rzwitserloot mentioned, this will fail if a .next() subroutine precedes the nextLine() call. To fix this, define the .nextLine() subroutine at the top to ignore the white-space character.

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();

Using useDelimiter()

You can change the default whitespace delimiter of the Scanner class to a newline character.

Scanner = stdin = new Scanner(System.in).useDelimiter("\n");
String name = stdin.nextLine();
String age = stdin.nextInt();
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文