文本块作为用户输入-使用带Java的扫描仪

文本块作为用户输入-使用带Java的扫描仪,java,input,Java,Input,如果我使用扫描仪请求用户输入,他们输入,例如: I am going to France and then I am going to Spain and finally I am going home 作为一个文本块并按enter键,如何创建包含这三行的字符串 使用Scanner.nextline()我只能得到第一行。这会让你接近,需要一些调整 StringBuffer input = new StringBuffer(); while (scanner.hasNextLine()) {

如果我使用扫描仪请求用户输入,他们输入,例如:

I am going to France
and then I am going to Spain
and finally I am going home
作为一个文本块并按enter键,如何创建包含这三行的字符串


使用Scanner.nextline()我只能得到第一行。

这会让你接近,需要一些调整

StringBuffer input = new StringBuffer();
while (scanner.hasNextLine())
{
    input.append(scanner.nextline());
}

System.out.println(input.toString());

您可以设置一个字符以退出循环,如-1或其他代码

    String line = null;

    while(scanner.hasNext()){
        line = scanner.nextLine();

        if(line.equals("-1")) break;

        doStuff(line);
    }

他们按了多少次回车键?按一下enter键,这是我的错误,它被输入了:我要去法国(新行),然后我要去西班牙(新行),最后我要回家。当从标准输入读取时,总是有下一行。循环永远不会结束。必须输入一些特殊的输入来表示块的结束(空行、点等)。应该使用StringBuilder而不是StringBuffer。注意,我将确保有一些东西可以结束循环。谢谢大家!@MikeB:但是如果你知道StringBuilder应该优先于StringBuffer,那么建议使用StringBuffer而不是StringBuilder有什么意义呢?不,在这种情况下,就像99.999%的情况一样,没有理由使用StringBuffer而不是StringBuilder。但我看到你也喜欢无限循环,所以你喜欢坏的选择而不是好的选择并不奇怪。使用同步类并不能神奇地使代码线程安全。如果它在实例变量中,我可能会同意。但是,当琐碎的转义分析显示没有其他线程可以看到它时,就没有理由会有额外的复杂性,StringBuffer的线程安全性也不是真正安全的,原因与Vector不安全的原因相同(复合操作,比如在决定是否追加换行符之前检查内容,不是原子操作)。(字符串连接使用StringBuilder,但不跨越循环。)你们应该在聊天中继续这个;我要走了。