当前位置: 代码迷 >> J2SE >> \r,\n,\r\n的有关问题
  详细解决方案

\r,\n,\r\n的有关问题

热度:357   发布时间:2016-04-24 02:09:21.0
\r,\n,\r\n的问题
请一定仔细看完贴子以后再回答!
这年头"回贴不看贴"(借用某人的一句话)的人太可怕了!

我现在对\r的理解:
Java code
将输入光标重置于行的开始处


以下JAVA代码:
Java code
public class a{    public static void main(String[] args) {        System.out.println("test\r123");    }}


Java code
[color=#FF0000]请在控制台下运行此JAVA代码,不要在IDE里面运行![/color]


得到的结果是:
Java code
123t


我对这个结果的理解是:
Java code
先输出了:test然后遇到\r光标被重置于行的开始处,也就是字母t的前面,然后又输出了123这时123将原来的tes覆盖掉了!所以最后的结果就是:123t



再看一个代码:
Java code
public class a{    public static void main(String[] args) {        System.out.println("test\n123");    }}


这个不用说了,结果肯定是:
Java code
test123


再看:
Java code
public class a{    public static void main(String[] args) {        System.out.println("test\r\n123");    }}


结果还是:
Java code
test123


这下问题来了:

Java code
先输出:test在遇到\r的时候,光标不是已经被重置到行首了么?那后面紧接着的\n123不是应该将原先输出的"test"全部覆盖掉么?可是看实际输出的结果,就知道,并没有覆盖,这是怎么回事?


第二个问题:
Java code
既然\n就可以换行,那windows还用\r\n干什么?


或许问题有点弱智,还望大家指教!
谢谢回答!

------解决方案--------------------
\r实际是回到行首.\n有时候如果第二行已经有了就会在最后边的
------解决方案--------------------
回车换行符,是2个符。
一个回车,一个换行。
一个是控制屏幕或者从键盘的Enter键输入。
另一个是控制“打印机”!

0d0a问题,是打印机时代留下的问题,LZ如果用过没有屏幕的,只有卷纸输出的机器,就可以知道,如果向打印机发送一个回车符是没有用的,只有发换行符才有用。

知道了\r\n的本质区别,LZ就可以搞清楚到底怎么回事儿了吧?
------解决方案--------------------
探讨
\r实际是回到行首.\n有时候如果第二行已经有了就会在最后边的

------解决方案--------------------
这下问题来了: 


Java code先输出:test
在遇到\r的时候,光标不是已经被重置到行首了么?
那后面紧接着的
\n123
不是应该将原先输出的"test"全部覆盖掉么?
可是看实际输出的结果,就知道,并没有覆盖,这是怎么回事?

楼主,我个人认为是这样的,在遇到\r的时候,光标已经被重置到行首了,但是接下来执行了\n还是换行了,
之后才输出的123而不是把\n123覆盖前面的。不知说的对不?高手请指教!!





\r 是回车,return
\n 是换行,newline

我们在平时使用电脑时,已经习惯了回车和换行一次搞定,敲一个回车键,即是回车,又是换行,但在早期的打字机上,要另起一行打字需要两个步骤,首先要发送命令"\r”将打字头复位,即回车,然后再发送命令"\n”让打字机走纸移到下一行,所以这个历史遗留问题导致了如今我们在DOS-Windows的系统里需要区分"\r\n”和“\n”,但在Unix中只有"\n”。

用UltraEdit打开文本查看,会看到换行处显示的是0x0D0A,0x0D即"\r”,0x0A即"\n”。
  相关解决方案