黑马程序员技术交流社区

标题: 模拟BufferedReader遇到难题了... [打印本页]

作者: 魏亮    时间: 2012-11-6 17:38
标题: 模拟BufferedReader遇到难题了...
本帖最后由 魏亮 于 2012-11-7 08:03 编辑

import java.io.*;import java.util.*;class MyBufferedReaderDemo {        public static void main(String[] args) throws Exception        {                MyBufferedReader mybufr = new MyBufferedReader(new FileReader("day.txt"));                String line=null;                while ((line=mybufr.readLine())!=null)                {                        System.out.println(line);                }                mybufr.myClose();                //System.out.println("Hello World!");        }}可为什么用上面的类调用,老是出错呢,好像打出了很多空字符!!


class MyBufferedReader
{
        private Reader r;
        MyBufferedReader(Reader r)
        {
                this.r=r;
        }
        public String readLine() throws Exception
        {
                char[] chs = new char[1024];//定义一个数组装数据
                int pos=0;
        
                int ch=0;
               
                while ((ch=r.read())!=-1)
                {
                        if (ch=='\r')
                        {
                                continue;
                        }
                        if (ch=='\n')
                        {
                                System.out.println(pos);

                                //return Arrays.toString(chs);
                                return new String(chs,0,pos);//将数据返回,pos正好是数组中元素的个数?
                        }
        
                        chs[pos++]=(char)ch;
                }
                if (chs.length!=0)
                {
                        
                        return new String(chs,0,pos);
                }
                return null;

        }
        public void myClose() throws Exception
        {
                r.close();
        }
        
}
//模拟BufferedReader内部结构, 为什么调用运行上面那个类会打印出一大堆的空字符呢??
//我return的时候明明定义了是0-pos 呀?










作者: 齐连涛    时间: 2012-11-6 18:15
本帖最后由 齐连涛 于 2012-11-6 18:16 编辑

               while ((ch=r.read())!=-1)
                {
                        if (ch=='\r')
                        {
                                continue;
                        }
                        if (ch=='\n')
                        {
                                System.out.println(pos);

                                //return Arrays.toString(chs);
                                return new String(chs,0,pos);//将数据返回,pos正好是数组中元素的个数?
                        }
                     else  //加个else
                             chs[pos++]=(char)ch;
                }


自己看看逻辑




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