2017-02-28 105 views
0

編寫我的程序時遇到了一個有趣的情況。
stringName.next()接受用戶的輸入,但stringName.nextLine()不接受。有什麼不同? (Java)

我需要接受用戶的一個詞來決定繼續循環。使用.nextLine()不允許用戶輸入輸入並且程序被中止,但.next()運行得很好。

我認爲,不同的是,.next()接受輸入直到字符串中第一個空間,而.nextLine()接受整個字符串。

如果兩者都應該接受用戶的輸入,爲什麼它很重要..這還有更多嗎?

.next() works perfectly fine for my program, but I'm curious for the future in case it happens again. 

謝謝。

+0

在做'nextLine'或'next'之前,'Scanner'上的最後一個操作是什麼?大概是像'nextInt'那樣的東西,並沒有脫離換行符。 –

+2

如果你[編輯]你的問題,添加你寫的代碼的簡短版本([mcve]是最好的)和用戶輸入的輸入,我們可能能夠回答你的問題。 – RealSkeptic

+0

1)我假設你在談論'掃描儀' - 說吧。 2)使用a)段落和b)嵌入代碼(反引號)格式化文本牆。 3)將您的實際代碼發佈到[MCVE](https://stackoverflow.com/help/mcve)中以證明問題。 –

回答

1

我總是喜歡用nextLine()來讀取輸入,然後解析字符串。

使用next()只會返回空格前的內容。返回當前行後,nextLine()自動移動掃描儀。

解析來自nextLine()的數據的有用工具是str.split("\\s+")

String data = scanner.nextLine(); 
String[] pieces = data.split("\\s+"); 
// Parse the pieces 

有關Scanner類或String類的更多信息,請參閱以下鏈接。

掃描儀: - http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html

字符串: - http://docs.oracle.com/javase/7/docs/api/java/lang/String.html

+0

如果問題解決了,請將此答案標記爲「已接受」。 –

0

也許你需要在使用前.nextLine在流沖洗()或 你需要後的.next()使用額外.nextLine()之前,真正的.nextLine()