Java:.nextLine() 和 .nextDouble() 区别

Posted

技术标签:

【中文标题】Java:.nextLine() 和 .nextDouble() 区别【英文标题】:Java: .nextLine() and .nextDouble() differences 【发布时间】:2012-07-18 23:42:46 【问题描述】:

我正在阅读 Java 的 API,因为我对 .nextLine().nextDouble() 之间的区别有疑问。在 API 中,.nextLine() 是这样说的:

“使扫描仪前进到当前行并返回被跳过的输入。此方法返回当前行的其余部分,不包括末尾的任何行分隔符。位置设置为下一行的开头。”

很简单...它会跳过您所在的当前行,然后返回您刚刚跳过的行。但是对于.nextDouble(),它是这样说的:

“将输入的下一个标记扫描为双精度值。如果下一个标记无法转换为有效的双精度值,此方法将抛出 InputMismatchException。如果翻译成功,扫描仪会前进超过匹配的输入。”

那么这是否意味着.nextDouble() 不会跳到新行,它只会读取到双精度数的末尾,然后在行尾停止?这将有助于我理解我现在正在开发的程序。谢谢大家!

【问题讨论】:

是的,如果您知道下一个输入在双精度后的下一行,您需要自己调用 nexLine。 假设你的 Scanner 被命名为 scanner,如果你想读取一个 double 并且它是唯一的在线你可以做类似 Double.parseDouble(scanner.nextLine()); 【参考方案1】:

它读取下一个标记(在 2 个分隔字符之间,通常是白色字符),而不是接下来的 4 个字节。然后,如果可以的话,它会将该标记转换为双精度。

Ex: Bla bla bla 12231231.2121 bla bla.

可以使用 nextDouble() 读取第 4 个标记。它读取 13 个字符,并尽可能将该字符串转换为双精度。

【讨论】:

【参考方案2】:
nextDouble()

仅从输入流中读取构成双精度的接下来的 4 个字节,并且不会前进到下一行,而 nextLine() 会。另外我认为您需要了解字符串'\n'指定了一个新行,并且显然一个数字不会包含换行符,因此'nextDouble()'不会'前进'到下一行。

编辑:拉兹万是对的

【讨论】:

啊哈!非常感谢,这让我更清楚了。 ***.com 是由这么多聪明人组成的……我在这里觉得自己微不足道,哈哈。再次感谢! 它不会“读取接下来的 4 个字节......构成双字节”。它扫描下一个token并将其解析为一个double。 我之前编辑了我的答案并提到 razvan 是对的

以上是关于Java:.nextLine() 和 .nextDouble() 区别的主要内容,如果未能解决你的问题,请参考以下文章

Java sanner类中next和nextLine的区别

java中nextLine()和next()的区别

Java中关于nextInt()next()和nextLine()的理解

Java中nextInt和nextLine同时使用出现的问题

java中next()和nextline()用法区别

nextLine()方法和next()方法区别