本帖最后由 衣带赞 于 2013-11-27 01:08 编辑
你这个myReadLine()是一个函数,当你每调用一次这个函数的时候,都会执行
StringBuilder sb = new StringBuilder();这句话,也就是说你每次都新创建了一个StringBuilder容器,并用变量名sb指向其地址值。所以执行return sb.toString();时,必然只返回当前所加入的字符。
如果你想将之前的内容全部返回,就不能在函数体里面创建StringBuilder类,而应该在外部调用函数中创建,并且把这个容器sb作为参数传递给这个函数。
比如:- public String myReaderLine(StringBuilder sb)
- {
- int ch = 0;
- while((ch=fr.read())!=-1)
- {
- if(ch=='\r')
- continue;
- if(ch=='\n')
- return sb.toString();
- else
- sb.append((char)ch);
- }
- }
复制代码 你这里忽略了一个问题,就是在局部变量中创立的对象并不具有全局效应,当函数结束后就退出内存。
打个最简单的比方:
for(int a=1; a<5; a++);
System.out.println(a);
这个代码就是错误的,因为找不到符号a,for循环体创立的变量和函数内创立的类是一个道理。不具有全局的作用范围。而:
int a = 1;
for(a=1; a<5; a++);
System.out.println(a);
就是正确的代码,只有在for循环外面创建a才有用,这个就比较清楚了吧。
|