请一定仔细看完贴子以后再回答!
这年头"回贴不看贴"(借用某人的一句话)的人太可怕了!
我现在对\r的理解:
将输入光标重置于行的开始处以下JAVA代码:
public class a{
public static void main(String[] args) {
System.out.println("test\r123");
}
}请在控制台下运行此JAVA代码,不要在IDE里面运行!得到的结果是:
123t我对这个结果的理解是:
先输出了:test
然后遇到\r
光标被重置于行的开始处,也就是字母t的前面,
然后又输出了123
这时123将原来的tes覆盖掉了!
所以最后的结果就是:123t
再看一个代码:
public class a{
public static void main(String[] args) {
System.out.println("test\n123");
}
}这个不用说了,结果肯定是:
test
123再看:
public class a{
public static void main(String[] args) {
System.out.println("test\r\n123");
}
}结果还是:
test
123这下问题来了:先输出:test
在遇到\r的时候,光标不是已经被重置到行首了么?
那后面紧接着的
\n123
不是应该将原先输出的"test"全部覆盖掉么?
可是看实际输出的结果,就知道,并没有覆盖,这是怎么回事?第二个问题:
既然\n就可以换行,那windows还用\r\n干什么?或许问题有点弱智,还望大家指教!
谢谢回答!

解决方案 »

  1.   

    \n是换行.如果下一行已经有了一些内容的话它会在那些内容的后边.因为一搬情况下下一行是没有数据的,很多时候\n也就成了\r\n作用一样
      

  2.   

    回车换行符,是2个符。
    一个回车,一个换行。
    一个是控制屏幕或者从键盘的Enter键输入。
    另一个是控制“打印机”!0d0a问题,是打印机时代留下的问题,LZ如果用过没有屏幕的,只有卷纸输出的机器,就可以知道,如果向打印机发送一个回车符是没有用的,只有发换行符才有用。知道了\r\n的本质区别,LZ就可以搞清楚到底怎么回事儿了吧?
      

  3.   

    在web应用中,比如HTTP协议规定的头格式,就是要求回城换行,就必须是\r\n,如果只写\n 就不能作为头结束的标志\r仅仅是回车
    \n是换行如果只用\n
    理论上得到的结果是
    test
        123
      

  4.   

    这下问题来了: 
    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”。有时候在文本文件中出现■这样的符号,是因为没有"\r\n"连用,导致不能正确回车换行。在C中读取文本时,"\r\n”已自动转成"\n”。 引用自http://blog.csdn.net/geriwolf/archive/2008/01/21/2056167.aspx
      

  5.   

    在windows下,\r\n的表现和只有留下一个字符是一样的,因为被特殊处理过了,以使打印机打出来的和画面上的表现一致。
    在Unix下,通常只有\r,如果是\r\n,用vi打开会看到行末有【^M】符号。
      

  6.   

    Java转义符 
    转义序列 标准形式 功能描述 
    \n NL 回车换行 
    \t HT 水平制表符 
    \b BS 后退一格 
    \r CR 回车不换行 
    \f FF 换页 
    \' ' 单引号 
    \\ \ 反斜杠 
    \" " 双引号 
    \ddd 0ddd 八进制模式 
    \xddd 0xddd 十六进制模式 
    \udddd 0xdddd Unicode双字节字符 
    看了你的问题我也查了一下 做了一个测试
    发现 :
    \r 会去掉 从左边起 同右边相同位数的字符串,并把字符串置到右边.
    如:
    test\r123-->123t
    atest\r123-->123st 
    aatest\r133-->12est
    test\r1234-->123
    atest\r1234-->123t 
    aatest\r1334-->123st我也不晓得原因,望高手继续分析.
      

  7.   

    回5楼:楼主,我个人认为是这样的,在遇到\r的时候,光标已经被重置到行首了,但是接下来执行了\n还是换行了, 
    之后才输出的123而不是把\n123覆盖前面的。不知说的对不?高手请指教!! 既然在遇到\r的时候,光标被重置到行首,那后面的\n
    为什么不会将已经输出的test
    也换行下一行呢?awusoft的猜想是,CMD下的\r\n只是将光标换行,光标后面的字符并不会被换行!
    不像记事本等工具,按下回车,就会将光标后面的所有字符都换到下一行去。不过也是猜想
      

  8.   


    根据我自己的测试结果我提出了一种设想:就是\r 将右边的内容  置到行首 并依次覆盖。
    只样就刚好可以解释上面我测试的这个现象。test\r123-->123t 
    atest\r123-->123st  
    aatest\r133-->12est 
    test\r1234-->1234 
    atest\r1234-->1234t  
    aatest\r1334-->1234st 

      

  9.   

    在windows下,\r\n出现的结果应该是光标移到行首,然后读到"\n"光标移到下行行首。
    这样就出现了
    test
    123
    的结果。
      

  10.   

    好像是:windows \n
    unix \r
    linux \n\r
    是不同文件系统的问题
      

  11.   

    本帖最后由 java2000_net 于 2008-04-22 16:10:52 编辑
      

  12.   

    \r 是回车,return ASCII = 0x13
    \n 是换行,newline ASCII = 0x0awindows下\r\n,linux或unix下\n
      

  13.   


    //嗯,好像在MAC OS下面是\r
      

  14.   

    就因为一件事,登陆上来留个言:
    发现很多程序员,居然对dos界面或者字符界面下的环境太不熟悉。
    如果想自己的编程能力提升一步,希望大家必须对命令行环境熟悉一些。如果大家熟悉命令行环境下的文本编辑,就不会出现楼主的第一个问题了。视窗环境下的记事本带给大家太多的误导。