[英]Java Scanner Input String
对于扫描仪,您可以将input.nextInt()
用于int
或input.nextDouble()
用于double
。
为什么要对String
使用input.nextLine()
而不是input.nextString()
?
与nextString()
最接近的是next()
,它返回下一个标记 ,默认情况下是下一个“单词”(由设置定界符控制,默认为空白)。
nextLine()
返回当前行的(其余)行(直到但不包括新行char), 而与delimiter无关 。 这就是为什么将其称为line而不是String的原因,因为“ line”最准确地描述了它的作用,而不是它返回的不会与next()
区别开来的类型。
命名约定使程序更易于阅读,从而使程序更易于理解。 他们还可以提供有关标识符功能的信息(例如,它是常量,包还是类),这有助于理解代码。
此方法返回当前行的其余部分,但不包括最后的任何行分隔符。 该位置设置为下一行的开始。 所以:
如果此方法返回一行,为什么还要命名为nextString()?
扫描程序类接受输入,并尝试将其转换为提到的数据类型。 如果您编写了nextDouble
则它将尝试将数据转换为Double数据类型。 如果转换失败,则将引发错误。
在nextLine的情况下,它将使用完整的下一行并将其转换为字符串,因为字符串的长度可以为n个字符。 this is a test message
是一个字符串值。
字符串数据可以包含空格,而其他任何数据类型则不能。
对于nextLine(),扫描程序将使用LINE_PATTERN = ".*(\\r\\n|[\\n\\r ])|.+$"
正则表达式匹配字符串。
对于nextDouble()或任何其他方法,您传递无效的输入,则它将引发java.util.InputMismatchException
类型的异常。
为了加总其他答案,所有本机类型的字节大小都是固定的 (例如, byte
为1, char
和short
为2, long
和double
为8,...),因此Scanner
可以轻松读取该字节数并返回适当的结果。
现在,一个String
多少字节? 如果它是C,它将是“ 直到找到nul字符 ”,但是nul字符在Java字符串中是合法的,因此您不知道从哪里停止读取。 这就是为什么没有nextString()
方法的原因。
取而代之的是,您可以任意决定以特定字符结尾的字符串,而该字符最终成为换行符\\r\\n
组合。 然后,该方法的正确名称是nextLine()
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.