黑马程序员技术交流社区
标题:
一个我自定义lineReader()方法中的问题
[打印本页]
作者:
黑马任雪刚
时间:
2012-5-19 17:28
标题:
一个我自定义lineReader()方法中的问题
import java.io.*;
class Myl
{
private FileReader f;
Myl(FileReader f)
{
this.f=f;
}
public String myReadLine() throws IOException
{
StringBuilder sb=new StringBuilder();
int ch=0;
while((ch=f.read())!=-1)
{
if(ch=='\r')
continue;
if(ch=='\n')
return sb.toString();
else
sb.append((char)ch);
}
if(sb.length()!=0)
{
return sb.toString();
}
return null;//为什么这儿要返回一个null呀???????
}
public void myClose() throws IOException
{
f.close();
}
}
public class Mylnr
{
public static void main(String[] args) throws IOException
{
Myl m=new Myl(new FileReader("demo.txt"));
String line=null;
while((line=m.myReadLine())!=null)
{
System.out.println(line);
}
m.myClose();
}
}
作者:
8161776
时间:
2012-5-19 17:41
本帖最后由 杨尧 于 2012-5-19 18:18 编辑
return null;//为什么这儿要返回一个null呀???????
因为你这个方法声明了返回类型,不是void,那么你这个方法就必须返回一个值,不然会报错的,
而且最后也不需要返回一个实际的值,所以就返回null
作者:
任睦强
时间:
2012-5-19 17:52
return null;//为什么这儿要返回一个null呀???????
因为你读的这个文件或许没有内容,就不走while循环,
StringBuilder对象里面就没有值,这样就返回一个空,就表示文件里面没有内容
作者:
李文富
时间:
2012-5-19 18:00
import java.io.*;
class Myl
{
private FileReader f;
Myl(FileReader f)
{
this.f=f;
}
public String myReadLine() throws IOException
{
StringBuilder sb=new StringBuilder();
int ch=0;
while((ch=f.read())!=-1)
{
if(ch=='\r')
continue;
if(ch=='\n')
return sb.toString();
else
sb.append((char)ch);
}
if(sb.length()!=0)
{
return sb.toString();
}
return null;//为什么这儿要返回一个null呀???????
//请看42行的while循环判断条件,你调用后返回null了
//就跳出循环;
}
public void myClose() throws IOException
{
f.close();
}
}
public class Mylnr
{
public static void main(String[] args) throws IOException
{
Myl m=new Myl(new FileReader("demo.txt"));
String line=null;
while((line=m.myReadLine())!=null)
{
System.out.println(line);
}
m.myClose();
}
}
作者:
李保成
时间:
2012-5-19 20:17
首先要明确StringBuilder底层是一个数组结构。
StringBuilder sb=new StringBuilder(); //创建一个字符串,用于接收数据传入的数据
int ch=0; //用于接收读取返回的数据
while((ch=f.read())!=-1) //循环条件,如果返回的字节不为-1,则表示还有数据,继续读
{
if(ch=='\r')
continue;
if(ch=='\n')
return sb.toString(); //这两行是读取标记,看是否是读取了一行,如果是一行的话,则将存入数组的字节变为字符串返回
else
sb.append((char)ch);
}
if(sb.length()!=0) //结合while循环,如果while循环结束,且字符串长度不为空,则将已存在到数组中的字节转化为字符串返回
{
return sb.toString();
}
return null;//为什么这儿要返回一个null呀???????至于这儿为什么返回的是return null,为了程序的严谨性,如果上边的条件都没有满足,也好有个返回值
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2