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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 殷婷婷 中级黑马   /  2013-11-19 21:37  /  1081 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 殷婷婷 于 2013-11-20 09:14 编辑
  1. class MyBufferedReader//模拟BufferedReader类
  2. {
  3.         private FileReader fr;
  4.         MyBufferedReader(FileReader fr)
  5.         {
  6.                 this.fr = fr;
  7.         }
  8.         //同BufferedReader中的readline方法,一次读一行
  9.        public String myReadline() throws IOException        {
  10.                
  11.                 StringBuilder sb = new StringBuilder();
  12.                 int ch = 0;        
  13.                 while((ch=fr.read())!=-1)
  14.                 {
  15.                         //对于下面两个if比较的不明白,\r是回车,\n是换行,感觉是一样的阿,为什么\r就       是continue,\n就是return sb.toString了呢?这两者有什么区别阿。

  16.                         if(ch=='\r')                                
  17.                   continue;
  18.                         if(ch=='\n')
  19.                                 return sb.toString();
  20.                         else
  21.                                 sb.append((char)ch);
  22.                 }
  23.                 if(sb.length()!=0)
  24.                         return sb.toString();
  25.                 return null;        
  26.         }
  27.         public void myClose() throws IOException
  28.         {
  29.                 fr.close();
  30.         }
  31. }
复制代码
问题在代码中 。

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 淡定,一切问题都会有解释的!.

查看全部评分

3 个回复

倒序浏览

在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的玩意,每秒钟可以打10个字符。但是它有一个问题,就是打完一行换行的时候,要用去0.2秒,正好可以打两个字符。要是在这0.2秒里面,又有新的字符传过来,那么这个字符将丢失。  
      于是,研制人员想了个办法解决这个问题,就是在每行后面加两个表示结束的字符。一个叫做“回车”,告诉打字机把打印头定位在左边界;另一个叫做“换行”,告诉打字机把纸向下移一行。  
      这就是“换行”和“回车”的来历,从它们的英语名字上也可以看出一二。  
      后来,计算机发明了,这两个概念也就被般到了计算机上。那时,存储器很贵,一些科学家认为在每行结尾加两个字符太浪费了,加一个就可以。于是,就出现了分歧。  
       Unix系统里,每行结尾只有“<换行>”,即“\n”;

Windows系统里面,每行结尾是“<换行><回车 >”,即“\n\r”;

Mac系统里,每行结尾是“<回车>”。

一个直接后果是,Unix/Mac系统下的文件在Windows里打开 的话,所有文字会变成一行;而Windows里的文件在Unix/Mac下打开的话,在每行的结尾可能会多出一个^M符号。

对应键盘里面"回车键"在windows系统中是“\n\r”;Unix系统是“\n”;mac系统里是“\r”


至于题目里面为什么是回车而不是换行,我也不知道。


不过在BufferedReader的官方文档中可以看到,readline()方法在遇到换行 ('\n')、回车 ('\r') 或回车后直接跟着换行,三种情况任意一种时,都会认为这一行已结束。

点评

FFF
感谢同学为我们普及知道~(我不会告诉你,我本来也不知道的!)哈哈哈~  发表于 2013-11-20 00:15

评分

参与人数 1技术分 +1 黑马币 +3 收起 理由
FFF + 1 + 3 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 张鹏 于 2013-11-19 22:34 编辑

因为Java是跨平台,而不同的操作系统,换行符是不一样的
windows是  \r\n    linux是\n
碰到\r自然是不需要做什么,碰到\n就表示这是行尾了

这样操作就变得统一了, 这只是针对特定平台的换行符做的一种过滤。

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 山寨,好像解释得太简单了一点点~嘿嘿~~.

查看全部评分

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