如何读取回车作为String with Scanner的一部分?

时间:2011-07-19 18:59:30

标签: java string java.util.scanner carriage-return

我正在编写一个java程序,需要一个长String作为用户的输入。这些字符串中的大部分都是从互联网上复制和粘贴的新闻文章。我遇到的问题是当用户输入文本时,它包含Scanner处理有问题的回车。我正在使用Scanner类中的nextLine()方法,问题是回车标记了行的结尾,从而终止了从扫描程序读取的内容。我也尝试了以下代码,但这导致了无限循环。 UserInput2是一个扫描仪。

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

任何人都知道如何跳过回车?也许有扫描仪将它们转换为'+'或类似的东西,所以我没有这个问题。

4 个答案:

答案 0 :(得分:1)

首先,注意:您应该查看StringBuilder类,而不是连接String对象。

其次,您可以将useDelimiter用于永远不会出现在输入字符串中的内容,或者更好的方法是将Apache commons IOUtils与InputStream一起使用,如this question而不是使用扫描程序,您可以指定字符编码。

您可以使用String.replace()删除'\ r'字符。

答案 1 :(得分:0)

所以不要使用Scanner。直接使用InputStream并将字节转换为字符串。

答案 2 :(得分:0)

无论您使用何种方法,都必须有一些输入终止的迹象。在Scanner案例中,您可以useDelimiterScanner的分隔符设置为您想要的任何内容。

您还可以查看herehere

答案 3 :(得分:0)

你知道那里有换行符,因为Scanner已经用它来确定它检索到的行的结尾。你所要做的就是重新插入你所知道的东西:

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

Martin关于使用StringBuilder的评论是正确的。这会将您的代码更改为:

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