黑马程序员技术交流社区

标题: 关于自定义LineNumberReader的问题 [打印本页]

作者: 张红    时间: 2012-6-18 11:13
标题: 关于自定义LineNumberReader的问题
本帖最后由 张红 于 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这里为什么发生错误  

作者: 梁清平    时间: 2012-6-18 11:30
windows下的换行符是“\r\n”

你用的是正斜杠。。。要搞清楚反斜杠和正斜杠啊。。
作者: 梁清平    时间: 2012-6-18 11:32
刘笑 发表于 2012-6-18 11:30
你已经把b定义成0了,怎么还能判断 if(b=='/r')和else if(b=='/n')呢?

:L                          
作者: 伊文龙    时间: 2012-6-18 11:35
主要问题是/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.                         }
复制代码

作者: 伊文龙    时间: 2012-6-18 11:40
这种问题一般会这样提示:

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

未命名.jpg

作者: 张红    时间: 2012-6-18 11:51
梁清平 发表于 2012-6-18 11:30
windows下的换行符是“\r\n”

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

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

再有就是String里面没有append方法,应该是StringBuffer




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2