黑马程序员技术交流社区

标题: ReadLine()原理的问题 [打印本页]

作者: 阿苏勒    时间: 2014-8-6 12:38
标题: ReadLine()原理的问题
  1. import java.io.*;
  2. class  MyBuffer
  3. {
  4.         private FileReader fr;
  5.        
  6.         MyBuffer(FileReader fr){
  7.                 this.fr=fr;
  8.         }
  9.         public String myReadLine()throws Exception{
  10.                 StringBuilder sb=new StringBuilder();
  11.                 int len=0;
  12.                 while((len=fr.read())!=-1){
  13.                         if(len=='\r'){
  14.                                 continue;
  15.                         }
  16.                         else if(len=='\n'){
  17.                                 return sb.toString();
  18.                         }
  19.                         else{
  20.                                 sb.append((char)len);
  21.                         }
  22.                 }
  23.                
  24.                 if(sb.length()!=0){
  25.                         return sb.toString();
  26.                 }
  27.                 return null;
  28.         }
  29.         public void myClose()throws Exception{
  30.                 fr.close();
  31.         }

  32. }

  33. class ReadLineDemo
  34. {
  35.         public static void main(String[] args)throws Exception
  36.         {
  37.                 MyBuffer mybur=new MyBuffer(new FileReader("Demo.java"));
  38.                 String line=null;
  39.                 while((line=mybur.myReadLine())!=null){
  40.                         System.out.println(line);
  41.                 }
  42.                 mybur.myClose();
  43.         }
  44. }
复制代码
问题是,为什么读取到'\n'的时候,StringBuilder 容器不清空?
求指教。




作者: 怀念黑海岸    时间: 2014-8-6 14:03
很多字眼在java中是有特殊含义的,就比如你这儿的反斜杠 \, 这个字符在java中的特殊含义就是转义符,代码在执行时,遇到这个字符就要去查看后面跟的字符是什么,如果是k,他就会输出 \k,因为这个字符在java中没有特殊含义,但是一旦发现是有特殊含义的字符:比如\n,这就表示是换行符,而不是普通字符。所以StringBuilder不清空字符\n.
作者: 晓风    时间: 2014-8-7 20:48
执行return将对象返回给方法之后,方法就结束了,不会在执行了,也就是StringBuilder 的对象不会在进行任何操作。清不清空都没有影响。下次再执行时,又会重新实例化StringBuilder ,所以不清空也没关系。
作者: star5603    时间: 2014-8-7 21:46
你下次读,它下次重新建立对象了,所以不需要




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