Java 读取多行输入的问题

Java 读取多行输入的问题,java,eclipse,Java,Eclipse,我试图接受用户输入并对其进行一些修改,但在用户输入多行时遇到了问题。为了解决这个问题,我尝试了: public static String getInput() { Scanner sc = new Scanner(System.in); String input = ""; System.out.println("Awaiting input..."); if(sc.hasNextLine()) { S

我试图接受用户输入并对其进行一些修改,但在用户输入多行时遇到了问题。为了解决这个问题,我尝试了:

public static String getInput() {
        Scanner sc = new Scanner(System.in);
        String input = "";

        System.out.println("Awaiting input...");

        if(sc.hasNextLine()) {
            System.out.println("Combining Input to One Line...");
            while(sc.hasNextLine()) {
                //System.out.println(sc.hasNextLine());
                //System.out.println("check");

                input.concat(sc.nextLine() + " ");

                //System.out.println(sc.hasNextLine());
                //System.out.println("check2");
                //System.out.println("check3");

            }
        }
        sc.close();
        return input;
    }

它似乎一直工作到输入的最后一行,在那里(调试了一点之后),它在尝试读取sc.hasNextLine()时遇到了问题。然而,这是非常奇怪的,因为我把完全相同的代码放在一个在线编译器中,在那里它工作得很好,除了需要预先输入的事实。它不会等到有任何输入。我对Java不是很有经验,所以我需要一些帮助。

如果无限循环是你的问题,那么它可以通过发送一个特殊的
EOF
标记来解决(
Ctrl-D
在Unix上,通常是
Ctrl-Z
在Windows上)。

我看不到你在“等待输入”之后接受输入。注意:
input.concat(…)
什么也不做。如果这是您的意思,它不会更改
input
的值,因为Java中的
String
是不可变的。它只是返回一个连接的值,但您没有将其分配给任何对象。至于您的问题,我不确定我是否理解。但是你的意思是你的程序不知道你的最后一行实际上是你的最后一行吗?如果你给它一个文件,它知道它是最后一行,因为它看到了文件的结尾,但当你从键盘输入时,你需要关闭流(ctrl-D或ctrl-Z)以达到同样的效果-但我不知道这是否是你真正的意思。@realpoint我把它改成了StringBuilder并使用了append。另一部分我不确定。每当有一个输入有多行时,它都会将它们全部附加到一行中,直到到达最后一行为止。我不知道为什么,但整个循环只是卡住了,在我停止程序之前不会做任何事情。可能是重复的,我尝试了几次,它似乎只工作了一次。其他时候,当我按下Ctrl-Z键时,什么也没发生。不过,它确实起作用了,我的键盘坏了。谢谢