黑马程序员技术交流社区

标题: '\r' 和 '\n' 的区别 [打印本页]

作者: shang1jk    时间: 2013-6-21 20:36
标题: '\r' 和 '\n' 的区别
本帖最后由 孙百鑫 于 2013-6-27 07:17 编辑

请教'\r' 和 '\n' 的区别.

网上都是说:
'\r'是回到行首
'\n'是下移一行

但是这么写:
  1. class Test2
  2. {
  3.         public static void main(String [] args)
  4.         {                        
  5.                         System.out.print("fa\rdfa\nsdf");
  6.                         
  7.         }

  8. }
复制代码
输出结果是:
fa
dfa
sdf


只有'\n'是下移一行的话, 不该出现三行啊?

作者: 高波    时间: 2013-6-21 21:07
在毕老师的视频中介绍到转义字符\
\n :换行;
\r :按下回车符;
\b :退格;
\t :制表符。

其中关于换行,在Linux系统中识别的换行符是"\n",在Windows系统中识别的换行符是"\r\n"。

所以"\r" "\n"都能达到换行的结果,只不过一个是按下回车符,一个生成新的一行。


作者: 谢威    时间: 2013-6-21 21:30
"\r"与"\n"在不同环境中代表作用不一样。
在c、c#语言中:  '\r'是回到行首
                       '\n'是下移一行
在java语言环境中"\r"与"\n"的作用与"\r\n"作用一样,都是回车换行。
作者: shang1jk    时间: 2013-6-21 22:05
谢威 发表于 2013-6-21 21:30
"\r"与"\n"在不同环境中代表作用不一样。
在c、c#语言中:  '\r'是回到行首
                       '\n'是 ...

可是看老毕的视频, 处理键盘录入的时候对二者是区分处理的啊. 为什么呀

就是这个例子中的:
  1. /*
  2. * 录入一行, 然后输出.
  3. * 若是over, 则停止.
  4. */

  5. import java.io.IOException;
  6. import java.io.InputStream;

  7. public class ReadIn {

  8.         public static void main(String[] args) throws IOException {
  9.                
  10.                 InputStream in = System.in;                        //标准输入流
  11.                
  12.                 StringBuilder sb = new StringBuilder();
  13.                
  14.                 while(true)
  15.                 {
  16.                         int ch = in.read();
  17.                         if(ch=='\r')
  18.                                 continue;
  19.                         if(ch=='\n')
  20.                         {
  21.                                 String s = sb.toString();
  22.                                 if("over".equals(s))                        //判断是否是over
  23.                                         break;
  24.                                 System.out.println(s.toUpperCase());
  25.                                 sb.delete(0, sb.length());
  26.                         }
  27.                         else
  28.                                 sb.append((char)ch);
  29.                 }

  30.         }

  31. }
复制代码

作者: shang1jk    时间: 2013-6-21 22:06
高波 发表于 2013-6-21 21:07
在毕老师的视频中介绍到转义字符\
\n :换行;
\r :按下回车符;

谢谢     
作者: 谢威    时间: 2013-6-22 09:27
shang1jk 发表于 2013-6-21 22:05
可是看老毕的视频, 处理键盘录入的时候对二者是区分处理的啊. 为什么呀

就是这个例子中的: ...

键盘录入时的环境是windows环境,他们的之间就要区别处理了。
作者: 280270738    时间: 2013-6-22 09:50
在不同语言中转义符会有所不同。java中\r表示按下回车,\n表示换行。
作者: Heart    时间: 2013-6-22 10:57
\r表示按下回车,\n表示换行,在windows系统中,\r\n可同时用,也可分开用,都可以达到换行的效果。
网上说\r是回到首行说的也没错,只不过是回到当前行的首航
作者: shang1jk    时间: 2013-6-22 11:52
Heart 发表于 2013-6-22 10:57
\r表示按下回车,\n表示换行,在windows系统中,\r\n可同时用,也可分开用,都可以达到换行的效果。
网上说\ ...

看楼主的代码, \r是换到下一行的行首才对啊
作者: 小佛爷    时间: 2013-6-23 22:01
今天看视频也遇到了这个问题。 \r 应该是不进行换行而在同一行覆盖写在这行的开头。举个例子:
1、System.out.print("hello\r World"); 输出的结果是World
  2、System.out.print("hello java!\r World"); 输出的结果是World java!
楼主的代码运行出来是:
dfa
sdf
作者: shang1jk    时间: 2013-6-23 22:12
小佛爷 发表于 2013-6-23 22:01
今天看视频也遇到了这个问题。 \r 应该是不进行换行而在同一行覆盖写在这行的开头。举个例子:
1、System. ...

奇了怪了, 测试了一下,
同样的代码在命令行里输出 world
在eclipse里运行输出 hello world

谁能解释....


作者: 8047107    时间: 2013-6-23 23:00
我们这两天讲了转义字符:
\r  \n  都是回车符~~
Linux中换行只用\n
windows中记事本里 回车符用\r\n两个字符.
Dos能识别 \n
都是换行的意思.
作者: shang1jk    时间: 2013-6-23 23:09
8047107 发表于 2013-6-23 23:00
我们这两天讲了转义字符:
\r  \n  都是回车符~~
Linux中换行只用\n

dos里\r是回到行首的意思
作者: 8047107    时间: 2013-6-23 23:14
shang1jk 发表于 2013-6-23 23:09
dos里\r是回到行首的意思

回车符~
作者: 孙百鑫    时间: 2013-6-27 07:16
楼主您好。我已将您的帖子改成已解决。如果帖子发布长时间没加分。及时联系我。以免漏分的情况发生{:soso_e100:}
作者: gzbbxu    时间: 2013-6-27 11:33
'\r'是回车,'\n'是换行,前者使光标到行首,后者使光标下移一格。通常用的Enter是两个加起来




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2