\ r \ n vs \ n \ r \ n他们的行为有什么不同?

时间:2017-04-25 09:56:26

标签: java string newline carriage-return linefeed

我指的是this问题,并且明白\ n将光标移动到下一行而不重置它,而\ r \ n重置光标但不将其移动到下一行。并且\ r \ n在Windows中用作新行char。 因此,出于好奇,我将\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行)然后为什么{2}没有在第2行打印?

编辑:

这是thisthis

中未涉及的其他问题

2 个答案:

答案 0 :(得分:4)

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

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

虽然历史原因是电传打印机的回车(将打印头向左移动)和换行(将纸张向前移动一行),但在\r\n中,只要显示为“{1}}就是一个”东西“关注。

\n\r不会以同样的方式被视为一个“事物”。但它通过一条线前进来处理每个角色。

答案 1 :(得分:2)

不同之处在于\n\r不存在,但\r\n确实存在。回到当天的原因是,像ASR-33那样具有“托架”的硬件可以与回车符重叠回车符如果回车首先出现。使用\n\r效率极低,所以没有人这样做。

所以不要这样做。