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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 高鑫 中级黑马   /  2012-6-19 23:24  /  1251 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 高鑫 于 2012-6-20 00:04 编辑
  1. import java.io.*;

  2. class MyBufferedReader //extends Reader//自定义装饰类,模拟BufferedReader
  3. {
  4.         private Reader r;
  5.         MyBufferedReader(Reader r)
  6.         {
  7.                 this.r = r;
  8.         }
  9.         //读一行的方法。
  10.         public String myReadLine()throws IOException
  11.         {
  12.                 StringBuilder sb = new StringBuilder();

  13.                 int ch = 0;

  14.                 while((ch=r.read())!=-1)
  15.                 {
  16.                         if(ch=='\r')
  17.                                 continue;
  18.                         if(ch=='\n')
  19.                                 return sb.toString();
  20.                         else
  21.                                 sb.append((char)ch);
  22.                 }


  23.                 if(sb.length()!=0)
  24.                         return sb.toString();
  25.                 return null;
  26.         }

  27.         public void myClose()throws IOException
  28.         {
  29.                 r.close();
  30.         }
  31. }
  32. class Demo
  33. {
  34.         public static void main(String[]args)throws IOException
  35.         {
  36.                 MyBufferedReader mybr=new MyBufferedReader(new FileReader("ceshi.java"));
  37.                 BufferedWriter bufw=new BufferedWriter(new FileWriter("F:\\ooo.java"));
  38.                 String s=null;
  39.                 while((s=mybr.myReadLine())!=null)
  40.                 {
  41.                         bufw.write(s);
  42.                         bufw.flush();
  43.                         bufw.newLine();
  44.                 }        
  45.                         
  46.         }
  47. }
复制代码
这个是老师的例题,我传入的ceishi.java也就是普通的一个java文件,问题是sb.toString()到底吧\t和\n放到StringBuilder里面没,我理解是当读到\t的时候,退出本次循环,读下一个\n,这时符合if(ch=='\n')的条件,toString了,我理解错了没???第二个问题是,return sb.toString();这里StringBuilder里并没有清空啊,前面的数据应该都在里面的啊,复制应该重复的,可事实没有,我哪里理解错了??

评分

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

查看全部评分

4 个回复

正序浏览
高鑫 发表于 2012-6-20 00:04
谢谢提醒

别客气                                       
回复 使用道具 举报
杨朔 发表于 2012-6-19 23:48
我感觉你第一个理解是正确的,这里面有个return,返回之后就会到
  while((s=mybr.myReadLine())!=null)

谢谢提醒
回复 使用道具 举报
第一个问题,你理解的很对啊,第二个问题没懂你说的啥意思。。。
回复 使用道具 举报
我感觉你第一个理解是正确的,这里面有个return,返回之后就会到
  while((s=mybr.myReadLine())!=null)

46.                {

47.                        bufw.write(s);

48.                        bufw.flush();

49.                        bufw.newLine();

50.                }        
再重新执行MyReadline方法,此时这句StringBuilder sb = new StringBuilder();每一次都new了一个新对象,此时的sb已经指向一个新对象了,
不再是原有对象了。

评分

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

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马