Java 如何在用户在控制台中输入字符时打印字符并在用户输入字符时停止

Java 如何在用户在控制台中输入字符时打印字符并在用户输入字符时停止,java,input,character,java.util.scanner,stringbuffer,Java,Input,Character,Java.util.scanner,Stringbuffer,我正在尝试编写一个方法,该方法可以打印出用户输入的任何字符,并在输入时附加上前面的字符,然后在按下enter键时抛出异常。我已经编写了以下代码,但当我输入时,它会附加我所编写的任何字符,并且不会引发异常。我将感谢你的帮助和建议 public static void inputM(StringBuffer a) throws EntExc, IOException{ char c; String m; while(true){ Sca

我正在尝试编写一个方法,该方法可以打印出用户输入的任何字符,并在输入时附加上前面的字符,然后在按下enter键时抛出异常。我已经编写了以下代码,但当我输入时,它会附加我所编写的任何字符,并且不会引发异常。我将感谢你的帮助和建议

public static void inputM(StringBuffer a) throws EntExc, IOException{
              char c;
       String m;
    while(true){
       Scanner s = new Scanner(System.in);

       m=s.next();
       c=m.charAt(0);

        if(c=='\r'){
            throw new EntExc();
        }
        System.out.println(a.append(m));
    }
}

这里有几个问题。第一个
s.next()
获取一个以空格分隔的令牌,并将整个令牌作为单个字符串返回。其次,由于
扫描仪
使用空格作为分隔符,因此它永远不会返回
\r
,它只会跳过它并读取下一个标记


为什么不使用
s.readLine()
并简单地回显整行内容呢?虽然它不会在输入字符时处理字符(
Scanner
不能真正做到这一点,它总是缓冲行),但它将更接近您所描述的要求。

另请参见:谢谢!是的,这确实让它变得更好,但是,有没有一种方法可以一个字符一个字符地打印出来,而不是一行一行地打印出来?谢谢你的链接。但当我读到readline时,它似乎并没有得到“\r”字符。我怎么知道用户按下了enter键呢?@Ana当
readLine()
返回时,表示用户按下了enter键。你真的不必检查它,我现在明白了。非常感谢你的帮助!这里可能是你需要的复制品是的,这一个有效。非常感谢。