A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 完美恋爱 高级黑马   /  2013-10-16 08:54  /  1169 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 完美恋爱 于 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就关闭了呢?
这行代码不是清空缓存区的意思吗?

评分

参与人数 1技术分 +1 收起 理由
周志龙 + 1

查看全部评分

2 个回复

倒序浏览
是的,因为你的StringBuilder对象在你每次从键盘输入数据的时候都会往上拼字符串,比如你输入
aaa回车,StringBuilder会变成aaa,你再输入bbb回车,StringBuilder 会变成aaabbb,你再输入over,
变成aaabbbover,所以"over".equals(s)不成立,无法退出。只有在你读到换行符的时候清空缓存,才能保证你下一次输入的时候StringBuilder是空的。

评分

参与人数 1技术分 +1 收起 理由
周志龙 + 1

查看全部评分

回复 使用道具 举报
bird_not_fat 发表于 2013-10-16 09:13
是的,因为你的StringBuilder对象在你每次从键盘输入数据的时候都会往上拼字符串,比如你输入
aaa回车,Str ...

原来如此,我懂了,谢谢了哈!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马