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中关于nextInt()next()和nextLine()的理解