2017-03-03 169 views
0

使用扫描仪,您可以使用input.nextInt()代替intinput.nextDouble()代替doubleJava扫描仪输入字符串

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

+0

因为整行是一个字符串?然后你可以把它称为一条线... – Li357

+0

我认为你可能会感到困惑,因为它占用了整行(包括空格),最后不包括任何行分隔符。 – Thrasher

+0

是的,我很困惑哈哈,刚开始尝试学习java。我只询问整行String line = input.nextLine()中的具体(Line)。 –

回答

2

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

nextLine()返回当前行(其余部分)(最多但不包括新行char),,而不管分隔符。这就是为什么它被称为线字符串,因为“线”最准确地描述它做什么,而不是什么类型,它返回它不会从next()

+0

啊我现在明白了,谢谢! –

0

扫描仪类接受输入并尝试将其转换为提及的数据类型。 如果您已经编写nextDouble,那么它会尝试将数据转换为Double数据类型。如果转换失败,则会引发错误。

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

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

对于nextLine(),扫描器将匹配LINE_PATTERN = ".*(\r\n|[\n\r

])|.+$"正则表达式的字符串。

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

+0

谢谢我认为我现在明白了,但是如果line是一个数据类型,为什么它可以用作输入行中的String之后的值?另外,为什么不说线而不是线,因为它会是一个字符串? –

+2

我想,因为一个字符串可以保持新行分隔符太 – Thrasher

+0

所以一行是在一个字符串?而int或double等其他内部没有其他内容,所以这就是为什么你只是使用Int,Double等? –

1

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

此方法返回的当前行的其余部分,不包括在端任何在线分离器。该位置设置为下一行的开头。所以:

为什么你会把它称为nextString()如果这个方法返回一行?

9 - Naming Conventions

+0

谢谢,所以它返回的不是一个字符串? –

0

区分自己在其他的答案加起来,所有的本地类型已经固定大小以字节(即byte是1,charshort是2,和longdouble 8,...),所以很容易对Scanner读取只是字节的量,并返回相应的结果。

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

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