黑马程序员技术交流社区
标题:
请解答疑问
[打印本页]
作者:
完美恋爱
时间:
2013-10-16 08:54
标题:
请解答疑问
本帖最后由 完美恋爱 于 2013-10-16 09:26 编辑
import java.io.*;
class My
{
public static void main(String[] agrs) throws IOException
{
InputStream in = System.in;
StringBuilder sb = new StringBuilder();
while(true)
{
int ch = in.read();
if(ch == '\r')
continue;
if(ch == '\n')
{
String s = sb.toString();
if("over".equals(s))
{
break;
}
System.out.println(s.toUpperCase());
}
else
sb.append((char)ch);
}
}
}
请问为什么这个在控制台里打over不关闭,可是在if(ch=='\n')语句里加上sb.delete(0,sb.length());这行代码后打over就关闭了呢?
这行代码不是清空缓存区的意思吗?
作者:
bird_not_fat
时间:
2013-10-16 09:13
是的,因为你的StringBuilder对象在你每次从键盘输入数据的时候都会往上拼字符串,比如你输入
aaa回车,StringBuilder会变成aaa,你再输入bbb回车,StringBuilder 会变成aaabbb,你再输入over,
变成aaabbbover,所以"over".equals(s)不成立,无法退出。只有在你读到换行符的时候清空缓存,才能保证你下一次输入的时候StringBuilder是空的。
作者:
完美恋爱
时间:
2013-10-16 09:25
bird_not_fat 发表于 2013-10-16 09:13
是的,因为你的StringBuilder对象在你每次从键盘输入数据的时候都会往上拼字符串,比如你输入
aaa回车,Str ...
原来如此,我懂了,谢谢了哈!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2