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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

import java.io.*;
class Myl
{
        private FileReader f;
        Myl(FileReader f)
        {
                this.f=f;
        }
        public String myReadLine() throws IOException
        {
                StringBuilder sb=new StringBuilder();
                int ch=0;
                while((ch=f.read())!=-1)
                {
                        if(ch=='\r')
                                continue;
                        if(ch=='\n')
                                return sb.toString();
                        else
                                sb.append((char)ch);
                }
                if(sb.length()!=0)
                {
                        return sb.toString();
                }
                return null;//为什么这儿要返回一个null呀???????
        }
        public void myClose() throws IOException
        {
                f.close();
        }
}
public class Mylnr
{

       
        public static void main(String[] args) throws IOException
        {
                Myl m=new Myl(new FileReader("demo.txt"));
                String line=null;
                while((line=m.myReadLine())!=null)
                {
                        System.out.println(line);
                }
                m.myClose();

        }

}

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

4 个回复

倒序浏览
本帖最后由 杨尧 于 2012-5-19 18:18 编辑

return null;//为什么这儿要返回一个null呀???????
因为你这个方法声明了返回类型,不是void,那么你这个方法就必须返回一个值,不然会报错的,
而且最后也不需要返回一个实际的值,所以就返回null

回复 使用道具 举报
return null;//为什么这儿要返回一个null呀???????
因为你读的这个文件或许没有内容,就不走while循环,
StringBuilder对象里面就没有值,这样就返回一个空,就表示文件里面没有内容

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
import java.io.*;
class Myl
{
        private FileReader f;
        Myl(FileReader f)
        {
                this.f=f;
        }
        public String myReadLine() throws IOException
        {
                StringBuilder sb=new StringBuilder();
                int ch=0;
                while((ch=f.read())!=-1)
                {
                        if(ch=='\r')
                                continue;
                        if(ch=='\n')
                                return sb.toString();
                        else
                                sb.append((char)ch);
                }
                if(sb.length()!=0)
                {
                        return sb.toString();
                }
                return null;//为什么这儿要返回一个null呀???????
                                //请看42行的while循环判断条件,你调用后返回null了
                                //就跳出循环;

        }
        public void myClose() throws IOException
        {
                f.close();
        }
}
public class Mylnr
{
        
        public static void main(String[] args) throws IOException
        {
                Myl m=new Myl(new FileReader("demo.txt"));
                String line=null;
                while((line=m.myReadLine())!=null)
                {
                        System.out.println(line);
                }
                m.myClose();
        }
}

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报

首先要明确StringBuilder底层是一个数组结构。

StringBuilder sb=new StringBuilder();  //创建一个字符串,用于接收数据传入的数据
int ch=0;                              //用于接收读取返回的数据
while((ch=f.read())!=-1)               //循环条件,如果返回的字节不为-1,则表示还有数据,继续读   
{
        if(ch=='\r')
                continue;
        if(ch=='\n')
                return sb.toString(); //这两行是读取标记,看是否是读取了一行,如果是一行的话,则将存入数组的字节变为字符串返回
        else
                sb.append((char)ch);
}
if(sb.length()!=0)  //结合while循环,如果while循环结束,且字符串长度不为空,则将已存在到数组中的字节转化为字符串返回
{
        return sb.toString();
}
return null;//为什么这儿要返回一个null呀???????至于这儿为什么返回的是return null,为了程序的严谨性,如果上边的条件都没有满足,也好有个返回值
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马