Java中字符串'\ n'和'\ r'之间有什么区别?

时间:2012-02-13 11:58:57

标签: java newline carriage-return

在Java中,换行符和回车符似乎都表现出相同的效果。

Java中的字面文字\n\r之间的实际差异是什么?


请注意,上述内容询问的是\n 字符,而不是newLine()上的BufferedWriter函数,因此this other question不相关

8 个答案:

答案 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