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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 魏明明 黑马帝   /  2012-4-21 01:42  /  2302 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

import java.io.*;

class MyBufferedReader
{
private FileReader r =null;
MyBufferedReader(FileReader r)
{
this.r = r;
}
public String myReadLine()throws IOException
{
StringBuilder sb = new StringBuilder();
int ch =0;
while ((ch=r.read())!=-1)
{
if(ch=='\r')
continue;
if(ch=='\n')
return sb.toString();
else
sb.append((char)ch);
}
if(sb.length()!=0)//上面的while循环里面已经往StringBuilder里面存了,这里的长度肯定不是0啊,这返回的应该是之前存入的所有字符啊
//为什么返回的的是 上次返回,到这次之间的字符呢

return sb.toString();
return null;
}
public void myClose() throws IOException
{
r.close();
}
public static void main(String[] args) throws IOException
{
FileReader fr = new FileReader("buf.txt");
MyBufferedReader mbr = new MyBufferedReader(fr);
String line =null;
while ((line =mbr.myReadLine())!=null)
{
System.out.println(line);
}
mbr.myClose();

}

}

评分

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

查看全部评分

5 个回复

倒序浏览
没人回答呢
回复 使用道具 举报
你看视频了应该也知道的。
当光标如果在字符的下面那行的话。就有'\n' 可以return sb.toString();
当如果光标在字符的最后面,而没有\'n'的话。return sb.toString(); 这段话是不执行的。所以不会返回最后一行字符。
而把最后一行存在sb里面了else  sb.append((char)ch); 并没有返出去。所以要写:
if(sb.length()!=0);//如果sb中还有字符的话
return sb.toString();//返出去



评分

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

查看全部评分

回复 使用道具 举报
邓斌 发表于 2012-4-21 11:20
你看视频了应该也知道的。
当光标如果在字符的下面那行的话。就有'\n' 可以return sb.toString();
当如果光 ...

你说的 我明白,我的意思是,在缓冲区中之前不存有字符了么,return sb.toString();缓冲区中的字符就没有了么?
回复 使用道具 举报
魏明明 发表于 2012-4-21 11:51
你说的 我明白,我的意思是,在缓冲区中之前不存有字符了么,return sb.toString();缓冲区中的字符就没有 ...

呵呵。对。sb里面是存了字符。但是没有return返出去。。while循环中只定义了ch=='\n' 才return数据
当没有ch=='\n'   而sb中还是存在数据。不过没有返出去。就需要

f(sb.length()!=0)  //这是判断,如果光标在最后一行,没有碰到\n。所以sb中还有一行数据没有返回出去。 判断是否还有数据。
return sb.toString();//有。就把最后一行返出去。
回复 使用道具 举报
邓斌 发表于 2012-4-21 12:07
呵呵。对。sb里面是存了字符。但是没有return返出去。。while循环中只定义了ch=='\n' 才return数据
当没 ...

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