2011-07-19 24 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();