Java中的字符文字'\n'和'\r'有啥区别?

Posted

技术标签:

【中文标题】Java中的字符文字\'\\n\'和\'\\r\'有啥区别?【英文标题】:What are the differences between char literals '\n' and '\r' in Java?Java中的字符文字'\n'和'\r'有什么区别? 【发布时间】:2012-03-04 19:57:30 【问题描述】:

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

在 Java 中 char 文字 \n\r 之间的实际区别是什么?


请注意,上面询问的是\n 字符,而不是BufferedWriter 上的newLine() 函数,因此与this other question 无关。

【问题讨论】:

@T.J.Crowder:你介意editing 让这个区别更清楚吗? @Will:我认为一开始就非常清楚,但显然没有给出近距离投票。 :-) 我添加了一个附言。 【参考方案1】:

\n 是换行 (LF) 字符,字符代码 10。\r 是回车 (CR) 字符,字符代码 13。它们的作用因系统而异。例如,在 Windows 上,文本文件中的行使用 CR 终止,然后紧跟 LF(例如,CRLF)。在 Unix 系统及其衍生系统上,仅使用 LF。 (Mac OS X 之前的 Mac 使用 CR,但 Mac OS X 是 *nix 衍生产品,因此使用 LF。)

在过去,LF 实际上只是在打印机上进行换行(向下移动一行而不移动页面上的水平位置),而 CR 类似地移回到行首没有 em> 将纸张向上移动,因此某些系统(如 Windows)发送 CR(返回到左侧)和 LF(并将纸张向上送入)。

由于所有这些混乱,一些输出目标将接受多个换行序列,因此您可以从任一字符看到相同的效果,具体取决于您要输出的内容。

【讨论】:

【参考方案2】:

区别不是特定于 Java 的,而是特定于平台的。 过去,类 UNIX 操作系统使用 \n 作为换行符,其他一些已弃用的操作系统使用 \r,Windows 操作系统使用 \r\n

【讨论】:

【参考方案3】:

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

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

\n 应该给你一个新行但不移动插入符号。

如果您想到旧打印机,您几乎会想到字符集的原始作者的想法。移动进纸器和移动插入符号是不同的操作。这两个字符表达了这种差异。

【讨论】:

【参考方案4】:

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

System.getProperty("line.separator")

【讨论】:

“正确结果”是什么意思?如果您要在不同的操作系统上部署,那么使用该行不是很正确,因为您的应用程序的行为会有所不同,这可能是错误的。例如,如果您需要文件中的一行以 0A 而不是 0d0a 结尾,因为第三方协议要求 - 那么 System.getProperty("line.separator") 将破坏逻辑【参考方案5】:

\n 适用于 unix \r 适用于 mac(OS X 之前)\r\n 适用于 windows 格式

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

它会给你适合你的操作系统

【讨论】:

在 Java 7 及更高版本中,您可以使用 System.lineSeparator()【参考方案6】:

当你在控制台(Eclipse)中打印一个字符串时,\n、\r和\r\n的效果是一样的,它们都会给你一个新的行;但是\n\r(也是\n\n ,\r\r) 会给你两个新行;当你将一个字符串写入文件时,只有 \r\n 可以给你一个新行。

【讨论】:

【参考方案7】:

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

【讨论】:

【参考方案8】:

在命令行中,\r 会将光标移回当前行的开头。要查看差异,您必须从命令提示符运行代码。 Eclipse 的控制台为这两个表达式显示了类似的输出。 如需完整的转义序列列表,请单击此处https://docs.oracle.com/javase/specs/jls/se8/html/jls-3.html#jls-3.10.6

【讨论】:

以上是关于Java中的字符文字'\n'和'\r'有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

Paxos 和 Cassandra 中的 W+R>=N 有啥区别?

Python 中的 !r 和 %r 有啥区别?

java里字符流 字节流和序列化的区别?

R中的整数类和数字类有啥区别

在 C# 中,\n 和 \r\n 有啥区别?

Java 中 JTextArea 和 JTextField 的有啥区别?