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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陈国柱 中级黑马   /  2013-10-2 22:41  /  2414 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

假设读取的源文本如下:
testing1
testing2

testing3
testing4
===================
既然使用readLine方法,是不返回任何终止符的,那么使用while(line=bufr.readLine())!=null)循环体的时候,读取到第三行(testing2 和testing3之间,只按了一个回车键)的时候,返回给line的不就应该是null么?难道是读取完第三行之后返回了一个'\r'给line了?

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

8 个回复

倒序浏览
应该是\r\n吧

评分

参与人数 1黑马币 +6 收起 理由
黄炳期 + 6

查看全部评分

回复 使用道具 举报
那个返回的是"";空元素,但不是null,写个程序测试下就可以了
  1. import java.io.BufferedReader;
  2. import java.io.InputStreamReader;

  3. public class Demo1 {

  4.         public static void main(String[] args) throws Exception {
  5.                 BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
  6.                 String str=null;
  7.                 while((str=br.readLine())!=null){
  8.                         if("".equals(str)){
  9.                                 System.out.println("hello!");
  10.                         }
  11.                 }
  12.         }
  13. }
复制代码
输入回车,会打印hello

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

回复 使用道具 举报
读到第三行是时,第三行时末尾处有个换行符即是\r\n,当读取到换行符之后,返回的值不是null,而是一个换行符,

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1 赞一个!

查看全部评分

回复 使用道具 举报
使用while(line=bufr.readLine())!=null)循环体的时候,读取到第三行(testing2 和testing3之间,只按了一个回车键)的时候,返回给line的不是null,readLine底层调用的是read方法,read方法将读到的字符存在数组里,read方法读到回车符后会把这一行不带回车符地返回。当读到你上面所说的第三行的时候,返回的是一个数组里面的空值为null,而不是这个数组对象是null。

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1 我和我的小伙伴都惊呆了!

查看全部评分

回复 使用道具 举报
再补充一点。readLine读取数据到流中后你再把这个流中数据写入到另外一个文本文件的时候,那个文本文件是不会出现你例子里面的回车的,你得把newLine加入流中才能再文本上出现换行。
回复 使用道具 举报
readLine()方法并不是读到的字符串什么都没有就返回null,而是到达流末尾才返回null。那什么时候叫做流末尾呢,就是没有读到字符,且没有终止符时才叫流末尾
而读到第三行时,虽然有个回车,但是readLine()方法是不能返回任何终止符的,所以并没有返回'\r'或'\n'。因为readLine()并没有换行功能,读到的信息会挤在一行。
你做个实验:
String s ="";
String s1=null;
System.out.println(s.equals(s1));
这个答案是false,说明什么?    说明没读到东西不等于是null

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1 赞一个!

查看全部评分

回复 使用道具 举报
同意陈钦涛的解释,顺便只要查一下api就明白了,我给你贴过来:
public String readLine() throws IOException
Reads a line of text. A line is considered to be terminated by any one of a line feed ('\n'), a carriage return ('\r'), or a carriage return followed immediately by a linefeed.
Returns:
A String containing the contents of the line, not including any line-termination characters, or null if the end of the stream has been reached
回复 使用道具 举报
在windows操作平台上回车的字符表示为\r\n
ios上则是\n
Linux上则是\r
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马