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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 邝雄伟 中级黑马   /  2013-2-1 16:39  /  1390 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

import java.io.*;
class MyReaderLine
{
private FileReader fr;
MyLineNumber(FileReader fr)
{
  this.fr=fr;
}
public String ReadLine()throws IOException
{
  StringBuilder sb = new StringBuilder();
  int ch = 0;
  while ((ch=fr.read())!=-1)
  {
   if(ch=='\r')
    continue;
   if(ch=='\n')
    return sb.toString();
   else
    sb.append((char)ch);
  }
  if(sb.length()!=0)  //为什么此处要用容器的长度方法呢?  不能这样判断?  if(sb.toString()!=null)  为什么不能这样呢?
   return sb.toString();
  return null;
   
  
}
public void close()throws IOException
{
  fr.close();
}

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

4 个回复

倒序浏览
1.sb.length()方法是判断容器内是否添加进了数据;
2、sb.toString()方法是将容器里的数据变成自字符串输出;
两个功能是不同的

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
public void MyLineNumber(FileReader fr)
{
  this.fr=fr;
}
发现你一个语法错误
if(sb.toString()!=null)
只要新建一个对象 new StringBuilder();
他的对象.toString 就不为null

StringBuilder重新object对象方法
public synchronized String toString() {
        return new String(value, 0, count);
    }
也就是没有字符串的是市 空 ""  而不是null
如果其他对象没有重新 就是类名加哈希表码
所以不能那样写 那就成了死循环了

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
length()是判断你的容器里面的sb对应数据的长度,String类型的长度为0就表示没有字符串;toString()方法返回此序列中数据的字符串表示形式,分配一个新的 String 对象,并将它初始化,以包含当前由此对象表示的字符串序列,然后返回此 String,也就是即使当返回的String没有内容时,即String为空,注意,它已经返回了,所以不能用null。

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
只要是你new出来的对象都不可能是null的...  
如果是对象引用,在没有赋予对象时,其值是null.
如果length() 的值是0,说明StringBuilder对象中是空的. 没有元素值.
如果你拿这个对象和null比较,就是拿一个存在的对象和null比较,永远都是false..  

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

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