我正在编写一个java程序,需要一个长String作为用户的输入。这些字符串中的大部分都是从互联网上复制和粘贴的新闻文章。我遇到的问题是当用户输入文本时,它包含Scanner处理有问题的回车。我正在使用Scanner类中的nextLine()方法,问题是回车标记了行的结尾,从而终止了从扫描程序读取的内容。我也尝试了以下代码,但这导致了无限循环。 UserInput2是一个扫描仪。
while(userInput2.hasNextLine())
toBeProcessed = toBeProcessed + userInput2.nextLine();
任何人都知道如何跳过回车?也许有扫描仪将它们转换为'+'或类似的东西,所以我没有这个问题。
答案 0 :(得分:1)
首先,注意:您应该查看StringBuilder类,而不是连接String对象。
其次,您可以将useDelimiter用于永远不会出现在输入字符串中的内容,或者更好的方法是将Apache commons IOUtils与InputStream一起使用,如this question而不是使用扫描程序,您可以指定字符编码。
您可以使用String.replace()删除'\ r'字符。
答案 1 :(得分:0)
所以不要使用Scanner。直接使用InputStream并将字节转换为字符串。
答案 2 :(得分:0)
无论您使用何种方法,都必须有一些输入终止的迹象。在Scanner
案例中,您可以useDelimiter
将Scanner
的分隔符设置为您想要的任何内容。
答案 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();