使用扫描仪,您可以input.nextInt()
使用int
,input.nextDouble()
使用double
。
为什么使用input.nextLine()
代替String
代替input.nextString()
?
答案 0 :(得分:2)
最接近nextString()
的是next()
,它返回下一个令牌,默认情况下是下一个“字”(通过设置分隔符来控制,默认为空格。)
nextLine()
返回当前行的(其余部分)(最多但不包括新行char(s)),(无论分隔符)。这就是为什么它被称为 line 而不是 String ,因为“line”最准确地描述它的作用,而不是它返回的哪种类型不会与{{1}区别开来。 }
答案 1 :(得分:1)
命名约定使程序更容易理解 更容易阅读。他们还可以提供有关功能的信息 标识符 - 例如,它是常量,包还是 class - 这有助于理解代码。
此方法返回当前行的其余部分,不包括末尾的任何行分隔符。该位置设置为下一行的开头。这样:
如果此方法返回一行,为什么要将其称为nextString()?
答案 2 :(得分:0)
Scanner类接受输入并尝试将其转换为提到的数据类型。
如果您已编写nextDouble
,那么它将尝试将数据转换为Double数据类型。如果转换失败,则会抛出错误。
对于nextLine,它将占用完整的下一行并将其转换为字符串,因为string可以是n个字符长。
this is a test message
是一个字符串值。
字符串数据可以包含空格,而任何其他数据类型都不会包含空格。
对于nextLine(),扫描程序会将字符串与LINE_PATTERN = ".*(\r\n|[\n\r
])|.+$"
正则表达式匹配。
对于nextDouble()或传递无效输入的任何其他方法,它将抛出java.util.InputMismatchException
类型的异常。
答案 3 :(得分:0)
要添加其他答案,所有原生类型都有固定大小(以字节为单位)(即byte
为1,char
且short
为2,{ {1}}和long
为8,...)因此double
很容易只读取该字节数并返回相应的结果。
现在,Scanner
有多少字节?如果它是C,它将是" 直到找到一个空字符",但是在字符串中nul字符是合法的,所以你不知道在哪里停止阅读。这就是没有String
方法的原因。
相反,您可以随意决定在特定字符处结束字符串,并且该字符最终成为换行符nextString()
组合。然后,该方法的正确名称为\r\n
。