黑马程序员技术交流社区

标题: 自定义的字符输入流包装类,停不下来,请大神帮忙给看看 [打印本页]

作者: jiao731097245    时间: 2015-11-11 15:47
标题: 自定义的字符输入流包装类,停不下来,请大神帮忙给看看
本帖最后由 jiao731097245 于 2015-11-11 16:53 编辑
  1. 请大神帮忙看看,<span style="line-height: 2.2em;">写了一个自定义字符流的包装类,感觉判断的都没错,程序就是停不下来。。。</span>
复制代码



作者: jiao731097245    时间: 2015-11-11 15:50
刚才代码没粘上

  1. import java.io.*;

  2. class Test12
  3. {
  4.         public static void main(String[] args) throws IOException
  5.         {
  6.                 MyBufferedReader mbr=new MyBufferedReader(new FileReader("D:\\Test12.java"));
  7.                 String line=null;
  8.                 while((line=mbr.myReadLine())!=null){
  9.                         System.out.println(mbr.getLineNumber()+":"+line);
  10.                        
  11.                 }
  12.                 mbr.close();
  13.         }
  14. }
  15. class MyBufferedReader
  16. {
  17.         private Reader r;
  18.         int line=0;
  19.         MyBufferedReader(Reader r){
  20.                 this.r=r;
  21.         }
  22.         public String myReadLine()throws IOException{
  23.                 line++;
  24.                 StringBuilder sb=new StringBuilder();
  25.                 int len=0;
  26.                 while((len=r.read())!=-1){
  27.                         if(len=='\r')
  28.                                 continue;
  29.                         else if(len=='\n')
  30.                                 return sb.toString();
  31.                         else
  32.                                 sb.append(((char)len));

  33.                 }
  34.                 if(sb!=null)
  35.                         return sb.toString();
  36.                 return null;
  37.         }
  38.         public int getLineNumber(){
  39.                 return line;
  40.         }
  41.         public void setLineNumber(int line){
  42.                 this.line=line;
  43.         }
  44.         public void close()throws IOException{
  45.                 r.close();
  46.         }
  47. }
复制代码

作者: 海狮    时间: 2015-11-11 16:29
错误在36行
if(sb!=null)
                        return sb.toString();
                return null;

不是sb!=null
是sb.length()!=0

你在前面声明变量的时候,已经给sb赋值了
StringBuilder sb=new StringBuilder();
这个情况下sb是永远不会等于null
你的程序就永远不会停了
作者: jiao731097245    时间: 2015-11-11 16:52
海狮 发表于 2015-11-11 16:29
错误在36行
if(sb!=null)
                        return sb.toString();

运行成功了,太感谢了。  尽管StringBuilder中无元素,但是通过new产生对象了,所以sb不为null,以后记住这个坑了




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