我用Java获取键盘输入,在控制台输入“o”,然后用Backspace把“o”删除,再输入“please”,最后得到输出结果是“oplease”。请问这是怎么回事儿,怎样避免程序如下
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class test {

public static void main(String[] arge) {

String str = "0";

try {
str = new BufferedReader(new InputStreamReader(System.in)).readLine();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

System.out.println(str);
}
}

解决方案 »

  1.   

    因为str产生的是一个对象,当str赋于读取输入流的内容后会将当前值与读取的内容合并。
    你上面定义str的时候应该写成String str="";
    这样就不会出现那种情况了。另外要告诉你,你键盘敲入的o并非最后产生结果中的o,而是你先前定义的str变量的值。
      

  2.   

    我在eclipse下运行没有出现楼主说的情况,不管你怎么输入,输出都是最后输入的字符。不会把初始值输出来。
      

  3.   

    str = new BufferedReader(new InputStreamReader(System.in)).readLine(); //再次赋值时,对象引用就指向了新的地址,与以前的就断开了联系,是不会把上次结果也输出了的
      

  4.   

    LZ不会出现你那种情况的,你自己再好好试下。
    还有1楼的你说错了,就算LZ把str的初始值设置为"0",最终的str结果是LZ输入的值
      

  5.   

    String是final类型的,不会追加改变。即使不是final类型的,也不会出现楼主说的那种情况。楼主再看看吧.
      

  6.   

    我在命令提示符下试过了啊,没有出现LZ的现象啊。我的是纯英文的环境,如果真的有这种现象你把默认的系统编码改成纯ascii的试一下。好运哦。
      

  7.   

    can you repro this ?
      

  8.   

    难道你们用的JDK有问题?我怎么测试都不会有问题
      

  9.   

    jdk1.5 环境下 测试 没有出现lz的情况
    over
      

  10.   

    jdk1.5.0_12环境下测试,没有发现问题
      

  11.   

    我怎么试着没事?我用的是JDK1.6.
      

  12.   

    我用的Windows版的Eclipse,确实出现那种情况了期待高手解答
      

  13.   

    直接在命令行下用 "java test" 命令运行没有问题难道是Eclipse的问题吗,11楼和12楼是不是也用的Eclipse
      

  14.   


    楼主的这个问题很简单:注意:这里你并没有删除,因为你其实是输入了一个 backspace 退格字符
    楼主的描述:在控制台输入“o”,然后用Backspace把“o”删除,再输入“please”,最后得到输出结果是“oplease”。 (1)先输入 "o"(2)输入backspace字符,这里掩盖了字符 "o"(3)然后输入"please"打印的时候显示oplease (说明:这里的p刚好掩盖了backspace退格字符)
      

  15.   

    谢谢楼上解答有这么两点不太明白1.Java流输入是获取用户真实的输入顺序还是获取控制台最终的输入结果2.输入backspace退格以后应该是输入的p覆盖掉先前输入的o,为什么是p覆盖掉了Backspace呢
      

  16.   

    在命令行下没有这个问题,在eclipse里就有这种问题 不是jdk的问题是IDE的问题,
      

  17.   


    你一定要知道,当你输入backspace的时候,表面上你是删除了以个字符,实际上你应该是输入了以个字符只不过这个字符对你来说是不可见的。
      

  18.   

    真的还是假的哦,难道new InputStreamReader(System.in)).readLine()有监听键盘的功能