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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张红 中级黑马   /  2012-6-18 11:13  /  1669 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张红 于 2012-6-19 13:06 编辑

class MyLineNumberReader {
        private Reader r;
        private int lineNumber;
        MyLineNumberReader(Reader r){
                this.r=r;
        }
        
        public String myReadLine() throws IOException{
                StringBuffer sb=new StringBuffer();
                int b=0;
                while((b=r.read())!=-1){
                        if(b=='/r'){
                                continue;
                        }
                        else if(b=='/n'){
                                lineNumber++;
                                return addLineNumber(sb.toString());
                        }
                        else{
                                sb.append((char)b);
                        }
                }
                if(sb.length()!=0){
                        return sb.toString();
                }
                return null;
        }
        public String addLineNumber(String str){
                return lineNumber+":"+str;
        }

        public void myClose() throws IOException {
                r.close();
        }

}在Eclipse中运行不出,不明白/r/n这里为什么发生错误  

7 个回复

倒序浏览
windows下的换行符是“\r\n”

你用的是正斜杠。。。要搞清楚反斜杠和正斜杠啊。。

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
刘笑 发表于 2012-6-18 11:30
你已经把b定义成0了,怎么还能判断 if(b=='/r')和else if(b=='/n')呢?

:L                          
回复 使用道具 举报
主要问题是/n、/r是字符串而不是字符
如果你的判断代码改成这样就没问题了
  1. if("\r".equal(b.toString())){
  2.                                 continue;
  3.                         }
  4.                         else if("\n".equal(b.toString())){
  5.                                 lineNumber++;
  6.                                 return addLineNumber(sb.toString());
  7.                         }
复制代码
回复 使用道具 举报
这种问题一般会这样提示:

未命名.jpg (68.44 KB, 下载次数: 27)

未命名.jpg

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
梁清平 发表于 2012-6-18 11:30
windows下的换行符是“\r\n”

你用的是正斜杠。。。要搞清楚反斜杠和正斜杠啊。。 ...

谢谢 明白了
回复 使用道具 举报
杨朔 中级黑马 2012-6-18 11:59:34
7#
你这里面有两个错误,第一个就是前面说的正反斜杠,前面说过了我就不说了,第二个就是
                else if(b=='/n'){
                                 lineNumber++;
                                 return addLineNumber(sb.toString());
在这里面 lineNumber++;是计行用的,应该放在循环前,还有这个不能有return,如果这样就一个一个字节的返回打印了,

再有就是String里面没有append方法,应该是StringBuffer
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马