我指的是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");
ABC
DEF
根据我的理解,这里\r
刚刚重置光标并将其移动到同一行的开头(第1行),\n
将其移至下一行(第2行)。因此DEF
以新行打印。
ABC
DEF
但是我无法理解输出2.我假设这个应该与输出1相同,因为如果\n
将光标前进到下一行(第2行),然后\r
重置并把它放在同一行的开头(在这种情况下可能是第2行)然后为什么{2}没有在第2行打印?
答案 0 :(得分:4)
这与Java无关,与控制台/终端/等有关。这是将输出转换为显示。
在Windows命令窗口中,规范的“行尾”编码为\r\n
。 Windows将此视为单个实体。
虽然历史原因是电传打印机的回车(将打印头向左移动)和换行(将纸张向前移动一行),但在\r\n
中,只要显示为“{1}}就是一个”东西“关注。
\n\r
不会以同样的方式被视为一个“事物”。但它通过一条线前进来处理每个角色。
答案 1 :(得分:2)
不同之处在于\n\r
不存在,但\r\n
确实存在。回到当天的原因是,像ASR-33那样具有“托架”的硬件可以与回车符重叠回车符如果回车首先出现。使用\n\r
效率极低,所以没有人这样做。
所以不要这样做。