2011-07-19 20 views
0

我正在寫一個java程序,需要一個長字符串作爲用戶的輸入。這些字符串中的大部分都是從互聯網上覆制和粘貼的新聞文章。我遇到的問題是,當用戶輸入文本時,它包含Scanner無法處理的回車符。我使用Scanner類中的nextLine()方法,問題是回車標記行的結束並因此終止從掃描器讀取的行。我也嘗試了下面的代碼,但是這會導致無限循環。 UserInput2是一個掃描儀。如何讀取回車作爲字符串與掃描儀的一部分?

while(userInput2.hasNextLine()) 
     toBeProcessed = toBeProcessed + userInput2.nextLine(); 

任何人都知道我可以跳過回車?也許有掃描儀將它們轉換爲'+'或類似的東西,所以我沒有這個問題。

+0

你是什麼意思的無限循環?你是說你從命令行輸入,它不會停止? –

+0

呃,不完全是。當我使用while循環時,掃描器無法識別輸入文本的末尾。 – Kurtis

+0

您可以嘗試輸入兩次輸入的結尾,當我遇到同樣的問題時,這對我有效。 –

回答

0

所以不要使用掃描儀。直接使用InputStream並將字節轉換爲字符串。

0

無論您使用何種方法,您都必須具有輸入終止符號。在Scanner的情況下,你可以用useDelimiterScanner的分隔符設置爲任何你想要的。

你也可以看看herehere

1

首先,注意:不應串聯字符串對象,而應該查看StringBuilder類。第二,你可以使用useDelimiter來永遠不會在輸入字符串中的東西,或者一個更好的方法是使用Apache公共IOUtils和InputStream,如this question,而不是使用掃描器,它可以給你帶來好處指定字符編碼。

您可以用String.replace()去掉'\ r'字符。

0

您知道那裏有一個換行符,因爲Scanner使用它來確定它檢索到的行的結尾。所有你需要做的就是重新插入你知道在那裏是什麼:

while(userInput2.hasNextLine()) 
    toBeProcessed = toBeProcessed + userInput2.nextLine() + "\n"; 

馬丁公司的有關使用StringBuilder評論是正確的。這將改變你的代碼看起來像:

while(userInput2.hasNextLine()) { 
    toBeProcessedSB = toBeProcessedSB.append(userInput2.nextLine()); 
    toBeProcessedSB = toBeProcessedSB.append("\n"); 
} 
toBeProcessed = toBeProcessedSB.toString();