Java中的char文字'\ n'和'\ r'有什么区别?


71

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

char文字\n\rJava之间的实际区别是什么?


请注意,以上内容询问的是\n 字符,而不是newLine()on的函数BufferedWriter,因此其他问题无关紧要。


@TJCrowder:您介意编辑以使区别更加清楚吗?

1
@Will:我本来以为很清楚,但显然没有投票赞成。:-)我添加了一个附言。
TJ Crowder '02

Answers:


98

\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(并向上送纸)。

由于所有这些混乱,某些输出目标将接受多个换行符序列,因此您可以根据输出的内容从两个字符中看到相同的效果。


64

\n适用于UNIX
\r适用于Mac(在OS X之前)
\r\n适用于Windows格式

你也可以 System.getProperty("line.separator")

它将为您提供适合您的操作系统的信息


15
在Java 7及更高版本中,您可以使用System.lineSeparator()
Adam6806 '16

15

这取决于您使用的平台。要获得正确的结果,请使用-

System.getProperty("line.separator")

1
“正确的结果”是什么意思?如果要在不同的OS上进行部署,使用该行并不是很正确,因为您的应用程序的行为会有所不同,这可能是错误的。例如,如果您需要文件中的一行以0A结尾而不是0d0a,因为第三方协议要求这样做-那么System.getProperty(“ line.separator”)将破坏逻辑
saferJo

6

区别不是特定于Java,而是特定于平台。从历史上看,类似UNIX的操作系统被\n用作换行符,使用了一些其他不推荐使用的操作系统,并且使用了\rWindows操作系统\r\n


4

它实际上取决于用于打印结果的内容。通常,结果是一样的,就像您说的那样-

从历史上讲,回车应该与home按钮的作用有关:将插入号返回到行的开头。

\n 应该给您换行,但不能移动插入符号。

如果您考虑使用旧打印机,则几乎是在考虑字符集的原始作者的想法。移动进纸器和插入符号是另一种操作。这两个字符表达了这种差异。


2

当您在控制台(Eclipse)中打印字符串时,\ n,\ r和\ r \ n具有相同的效果,它们都会给您换行;但是\ n \ r(也为\ n \ n,\ r \ r)会给您两行;当您向文件中写入字符串时,只有\ r \ n会给您新行。


0

以上提供的答案是完美的。LF(\n),CR(\r)和CRLF(\r\n)字符取决于平台。但是,这些字符的解释不仅由平台定义,而且还由您使用的控制台定义。在Intellij控制台(Windows)中,\r此语句中的此字符System.out.print("Happ\ry");产生output y。但是,如果您使用终端(Windows),则会得到yapp输出。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.