问题描述
请问怎样清空java的输入缓冲区?就用C/C++中的flush(stdin),Thanks
解决方案
解决方案二:
flush()是对输出流的方法吧!如果清空输入缓冲区的话,可以循环读啊!知道返回-1
解决方案三:
byte[]b=newbyte[2048];intnum=din.read(b);//将输入的数据读到一个数组中循环判断num的值要是为-1的话则清空了否则还有数据
解决方案四:
Thanks
解决方案五:
JAVA自己不是有垃圾回收机制吗?
解决方案六:
不是的,搞错了,我第一次输入了一些数据,我在第二次输入之前想把以前的数据清空掉,这怎么清?如我第一次用system.in.read()输入了一字符,第二次用System.in.read(buffer)的时候就不要我输入,就把后面的字符打印出来了,请问怎样在第二次输入之前把输入缓冲区清掉,如下的代码:importjava.io.*;publicclassReadString{publicstaticvoidmain(String[]args)throwsIOException{intcounter=0;bytebuffer[]=newbyte[512];printStar();System.out.println("Thelengthofbufferarrayis:"+buffer.length);printStar();//TestreadacharSystem.out.println();printStar();System.out.print("Pleaseenterachar:");System.out.println("printtheinputcharis:"+(char)(System.in.read()));printStar();//TestreadastringSystem.out.println();printStar();System.out.print("Pleaseenterastring:");counter=System.in.read(buffer);System.out.println("Thelengthoftheinputstringis:"+counter);System.out.print("Theinputstringis:");for(inti=0;i<counter;i++){System.out.print(buffer[i]+"");}}publicstaticvoidprintStar(){System.out.println("***************************************");}}结果:***************************************Thelengthofbufferarrayis:512******************************************************************************Pleaseenterachar:gprinttheinputcharis:g******************************************************************************Pleaseenterastring:Thelengthoftheinputstringis:2//这里我没有输入,输入数组的长度就为2了Theinputstringis:1310
解决方案七:
你把buffer的内容读进来,又赋给counter了,想清空重新new一下,或置为空以后,重新读入。
解决方案八:
up.
解决方案九:
System.in会把你输入完后摁的回车换行也做为两个字符在输入缓冲区中,所以直接不用你输!你可以再你下一次输入之前读出来回车和换行符!代码如下://TestreadacharSystem.out.println();printStar();System.out.print("Pleaseenterachar:");System.out.println("printtheinputcharis:"+(char)(System.in.read()));printStar();System.in.read();System.in.read();//TestreadastringSystem.out.println();printStar();System.out.print("Pleaseenterastring:");counter=System.in.read(buffer);System.out.println("Thelengthoftheinputstringis:"+counter);System.out.print("Theinputstringis:");for(inti=0;i<counter;i++){System.out.print(buffer[i]+"");}}publicstaticvoidprintStar(){System.out.println("***************************************");}}
输出结果如下:***************************************Thelengthofbufferarrayis:512******************************************************************************Pleaseenterachar:hprinttheinputcharis:h******************************************************************************Pleaseenterastring:dThelengthoftheinputstringis:3Theinputstringis:1001310注意,此时虽然你好像只输入了一个d,但里面有三个,13和10分别为回车和换行的ASCII码
解决方案十:
倒没看到可以清空的方法。。只看到可以跳多少字符读
解决方案十一:
这就像C语言的scanf和c++的cin要用getchar()吃掉回车一样!
解决方案十二:
谢谢,非常感谢!