繁体   English   中英

Java扫描仪输入字符串

[英]Java Scanner Input String

对于扫描仪,您可以将input.nextInt()用于intinput.nextDouble()用于double

为什么要对String使用input.nextLine()而不是input.nextString()

nextString()最接近的是next() ,它返回下一个标记 ,默认情况下是下一个“单词”(由设置定界符控制,默认为空白)。

nextLine()返回当前行的(其余)行(直到但不包括新行char), 而与delimiter无关 这就是为什么将其称为line而不是String的原因,因为“ line”最准确地描述了它的作用,而不是它返回的不会与next()区别开来的类型。

命名约定使程序更易于阅读,从而使程序更易于理解。 他们还可以提供有关标识符功能的信息(例如,它是常量,包还是类),这有助于理解代码。

此方法返回当前行的其余部分,但不包括最后的任何行分隔符。 该位置设置为下一行的开始。 所以:

如果此方法返回一行,为什么还要命名为nextString()?

9-命名约定

扫描程序类接受输入,并尝试将其转换为提到的数据类型。 如果您编写了nextDouble则它将尝试将数据转换为Double数据类型。 如果转换失败,则将引发错误。

在nextLine的情况下,它将使用完整的下一行并将其转换为字符串,因为字符串的长度可以为n个字符。 this is a test message是一个字符串值。

字符串数据可以包含空格,而其他任何数据类型则不能。

对于nextLine(),扫描程序将使用LINE_PATTERN = ".*(\\r\\n|[\\n\\r ])|.+$"正则表达式匹配字符串。

对于nextDouble()或任何其他方法,您传递无效的输入,则它将引发java.util.InputMismatchException类型的异常。

为了加总其他答案,所有本机类型的字节大小都是固定的 (例如, byte为1, charshort为2, longdouble为8,...),因此Scanner可以轻松读取该字节数并返回适当的结果。

现在,一个String多少字节? 如果它是C,它将是“ 直到找到nul字符 ”,但是nul字符在Java字符串中是合法的,因此您不知道从哪里停止读取。 这就是为什么没有nextString()方法的原因。

取而代之的是,您可以任意决定以特定字符结尾的字符串,而该字符最终成为换行符\\r\\n组合。 然后,该方法的正确名称是nextLine()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM