Java Scanner输入字符串

时间:2017-03-03 04:23:48

标签: java java.util.scanner

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

为什么使用input.nextLine()代替String代替input.nextString()

4 个答案:

答案 0 :(得分:2)

最接近nextString()的是next(),它返回下一个令牌,默认情况下是下一个“字”(通过设置分隔符来控制,默认为空格。)

nextLine()返回当前行的(其余部分)(最多但不包括新行char(s)),(无论分隔符)。这就是为什么它被称为 line 而不是 String ,因为“line”最准确地描述它的作用,而不是它返回的哪种类型不会与{{1}区别开来。 }

答案 1 :(得分:1)

  

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

此方法返回当前行的其余部分,不包括末尾的任何行分隔符。该位置设置为下一行的开头。这样:

如果此方法返回一行,为什么要将其称为nextString()?

9 - Naming Conventions

答案 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,charshort为2,{ {1}}和long为8,...)因此double很容易只读取该字节数并返回相应的结果。

现在,Scanner有多少字节?如果它是C,它将是" 直到找到一个空字符",但是在字符串中nul字符是合法的,所以你不知道在哪里停止阅读。这就是没有String方法的原因。

相反,您可以随意决定在特定字符处结束字符串,并且该字符最终成为换行符nextString()组合。然后,该方法的正确名称为\r\n