什么是\r\n、\r和\n之间的区别?

564

字符串中的\r\n\r\n有什么区别?每种方式如何影响字符串?

我需要用\n替换\r\n\r的出现,但我不知道它们在字符串中有什么不同...

我知道\r就像按回车键,而\n是用于新行。


3
如果你能想象一台打字机放在你面前,这就很容易理解了: \n - 将打字机向下移动一行 \r - 回车,即将打字机滚筒或打印头移动,使得下一个字符位于行的开头而不是末尾。 - Eugene W.
4个回答

704
  • \r = 回车符 (Carriage Return) → 在Mac OS X之前被用作换行符
  • \n = 换行符 (Line Feed) → 在Unix/Mac OS X中被用作换行符
  • \r\n = 回车符 + 换行符 → 在Windows中被用作换行符

8
http://en.wikipedia.org/wiki/Newline - Alasjo
11
LF 代表换行符,CR 代表回车符。 - Matten
7
Windows中的\r\n表示换行。 - MrBlue
8
\r 用于 Mac OS 9 及以下版本(在称为“System”之前的时代也是如此)。Mac OS X 大多使用 \n(并且是 Unix)。 - Bruno
7
顺便说一下:http://geek-and-poke.com/geekandpoke/2014/2/5/babylon - cassi.lup
显示剩余7条评论

270

这三个符号都代表着一行的结束。但是...

  • \r (回车符) → 将光标移动到下一行开始前,不换行。
  • \n (换行符) → 将光标移到下一行开头,不返回本行开头 — 在*nix环境中,\n 移到行开头。
  • \r\n (行结束符) → 由\r\n组成

2
\r\n有实际用途吗?我不明白为什么换行符不能从开头开始。你有例子吗? - alp
4
@alp - 支持串口接口的打印机或终端,兼容Centronix打字机。这是学生使用Arduino UART时非常普遍的经验。 - mckenzm
1
是的,对于最常见的情况,可以查看HTTP头部。请参考 - Yagiz Degirmenci
3
想象一下打字机。你可以在不将车返回到行的开头的情况下移动到下一行。这就是这些控制字符的起源。 - Clonkex

33

它们是普通符号,例如'a'或'ю'或其他任何符号。只是字符串中的(不可见)条目。 \r 将光标移动到行首。 \n 向下移动一行。

至于您的替换,由于您没有指定使用的语言,因此这里提供一个草图:

someString.replaceAll("\r\n", "\n").replaceAll("\r", "\n")

19

回车符 (\r) 会使光标跳到第一列(行的开始),而换行符 (\n) 则跳到下一行 并且可能还会 跳到那一行的开头。因此为了确保在下一行的第一个位置,可以同时使用两者。


2
我注意到当我解析多行字符串时,有时它们只是用 \n 分隔,但其他时候则是用 \r\n。是什么决定了使用哪个来分隔行? - Tony
通常,我们在库中编写的任何内容都可以使用高级语言编写println()。对于串行终端和打印机,我们需要回车和换行或下一行缩进到上一行结束的位置。但是,在文本文件中可以隐含这一点,并在传输到TTY或LP时进行适当的替换。 - mckenzm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接