在Java中,换行符和回车符似乎都表现出相同的效果。
Java中的字面文字\n
和\r
之间的实际差异是什么?
请注意,上述内容询问的是\n
字符,而不是newLine()
上的BufferedWriter
函数,因此this other question不相关
答案 0 :(得分:83)
\n
是换行符(LF)字符,字符代码10. \r
是回车符(CR)字符,字符代码13.他们所做的事情因系统而异。例如,在Windows上,使用CR终止文本文件中的行,然后立即使用LF(例如,CRLF)终止。在Unix系统及其衍生产品上,只使用LF。 (Mac OS X之前的Mac使用CR,但Mac OS X是* nix衍生物,因此使用LF。)
在过去,LF字面上只对打印机进行换行(向下移动一行而不移动到页面上的水平位置),并且CR同样移回到行的开头而没有向上移动纸张,因此一些系统(如Windows)发送CR(返回到左侧)和LF(并向上送纸)。
由于所有这些混淆,一些输出目标将接受多个换行符序列,因此您可以从任一角色看到相同的效果,具体取决于您输出的内容。
答案 1 :(得分:47)
\n
适用于unix
\r
用于mac(在OS X之前)
\r\n
适用于Windows格式
您也可以System.getProperty("line.separator")
它将为您提供适合您的操作系统
答案 2 :(得分:13)
这取决于您使用的平台。要获得正确的结果,请使用 -
System.getProperty("line.separator")
答案 3 :(得分:5)
区别不是特定于Java,而是特定于平台。
过去,类似UNIX的操作系统使用\n
作为换行符,其他一些已弃用的操作系统使用\r
而Windows操作系统使用\r\n
。
答案 4 :(得分:2)
它实际上取决于用于打印结果的内容。通常,结果是一样的,就像你说的那样 -
历史上回车应该是关于home
按钮的作用:将插入符号返回到行的开头。
\n
应该给你一个新线但不移动插入符。
如果你考虑旧打印机,你几乎在想着字符集的原作者是如何思考的。移动送纸器和移动插入符号是一种不同的操作。这两个字符表达了这种差异。
答案 5 :(得分:0)
当您在控制台(Eclipse)中打印字符串时,\ n,\ r和\ r \ n具有相同的效果,所有这些都会为您提供一个新行;但是\ n \ r \ n(也是\ n \ n ,\ r \ n)将为您提供两个新行;当您将字符串写入文件时,只有\ r \ n可以为您提供一个新行。
答案 6 :(得分:0)
以上提供的答案是完美的。 LF({\n
),CR(\r
)和CRLF(\r\n
)字符取决于平台。但是,这些字符的解释不仅由平台定义,而且还由您使用的控制台定义。在Intellij控制台(Windows)中,此语句\r
中的这个System.out.print("Happ\ry");
字符产生输出y
。但是,如果使用终端(Windows),则会得到yapp
作为输出。
答案 7 :(得分:0)
在命令行上,\ r将光标移回当前行的开头。若要查看差异,必须从命令提示符处运行代码。 Eclipse的控制台为这两个表达式显示类似的输出。 有关转义序列的完整列表,请单击此处https://docs.oracle.com/javase/specs/jls/se8/html/jls-3.html#jls-3.10.6