2017-03-03 154 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()