【问题标题】:\r\n vs \n\r what is the difference in their behavior? [duplicate]\r\n vs \n\r 他们的行为有什么区别? [复制]
【发布时间】:2017-09-22 06:34:52
【问题描述】:

我指的是this 问题并理解 \n 将光标移动到下一行而不重置它,而 \r 重置光标但不将其移动到下一行。并且 \r\n 在 Windows 中用作换行符。 因此,出于好奇,我将\r\n\n\r 与Java 中的一些其他值一起分配给字符串,并在我的Windows 环境中的控制台中打印它们。

System.out.println("ABC\r\nDEF");
System.out.println("ABC\n\rDEF");

输出 1:

ABC
DEF

根据我的理解,这里 \r 只是重置了光标并将其移动到同一行的开头(第 1 行),\n 将其推进到下一行(第 2 行)。因此DEF 打印在新行中。

输出 2:

ABC

DEF

但我无法理解输出 2。我认为这应该与输出 1 相同,因为如果 \n 将光标前进到下一行(第 2 行),然后如果 \r 将其重置并放置在同一行的开头(在这种情况下可能是第 2 行)那么为什么 DEF 没有在第 2 行打印?

编辑:

这是thisthis 未涵盖的附加问题

【问题讨论】:

  • @Obenland 那里没有提出或回答这个额外的问题。
  • @Obenland 您的链接仅提到 Windows 支持 \r\n。但 Windows 也仅支持 \n 和仅 \r。因此,我得到了这个问题,并且在您提到的链接或 XtremeBaumer 提到的链接中没有回答。

标签: java string newline carriage-return linefeed


【解决方案1】:

区别在于\n\r 不存在,但\r\n 存在。回到过去,原因是像 ASR-33 这样具有“马车”的硬件可能会用换行符与回车重叠 if 回车首先出现。使用\n\r 效率极低,所以没有人这样做。

所以不要这样做。

【讨论】:

  • 有趣。因此,如果 ASR-33 在该操作期间收到LF,则在托架返回时将推进纸张,但如果在该操作期间收到CR,则在纸张前进之前不会返回托架。
  • 我就是这么说的。还有众多的移动头点阵打印机。
  • 谢谢 - 只是澄清“重叠”的含义。
  • 哦,谢谢@EJP 和苗条。现在我明白了,学到了一些新东西。
  • @slim 还有什么意思?
【解决方案2】:

这与 Java 无关,与控制台/终端/等有关。这就是将输出转换为显示。

在 Windows 命令窗口中,规范的“行尾”编码是 \r\n。 Windows 将其视为单个实体。

尽管历史原因是电传打印机的回车(将打印头向左移动)和换行符(将纸张提前一行),但在 Windows 中\r\n 就显示而言是一个“东西”。

\n\r 不会以同样的方式被识别为一个“事物”。但它通过前进一行来处理每个字符。

【讨论】:

  • 感谢@slim 的回答。但是如果\n\r 被处理为两个独立的东西,我也尝试单独传递\n 和单独传递\r,它们都能够在新行上打印字符。那么我们是否习惯于一起传递\r\n 只是为了遵循预设标准,或者我们也可以单独使用\n\r 之一?这被认为是一种不好的做法吗?
猜你喜欢
  • 2013-03-04
  • 1970-01-01
  • 2011-04-18
  • 1970-01-01
  • 1970-01-01
  • 2010-11-19
  • 2011-04-28
  • 1970-01-01
  • 2012-09-05
相关资源
最近更新 更多