在Java中打印新行的%n和\n的区别

13
Java的文档规定在换行时使用%n而不是\n。
根据Oracle JavaSE Number documentation

一个适用于运行应用程序的平台的新行字符。您应该始终使用%n,而不是\n。

如果有的话,两者之间的显着区别是什么?


这只是Java的惯例。 - Raghavendra
5
这个问题已经被回答了:https://dev59.com/YXI-5IYBdhLWcg3wYnSQ - Maiko Kingma
请查看之前的讨论:https://dev59.com/YXI-5IYBdhLWcg3wYnSQ - Harish
谢谢提供链接。 - Ashish Krishnan
4
顺便说一下,“你应该总是使用%n”这个说法在我看来真的很误导。如果想使用特定于平台的换行符,可以使用%n... 但并非总是如此 - 经常会对网络协议或需要特定换行符的文件格式进行数据格式化。在这里,文档写得不够严谨,我认为。 - Jon Skeet
2个回答

20

%n在不同平台之间是可移植的,由%n发出的值将适合底层平台,而由\n发出的值在所有平台上都相同。

\n是Unix系统中正确的换行符,其他系统可能使用不同的字符来表示行尾。

Windows系统使用\r\n,早期的MacOS系统使用\r


5
我认为恰恰相反 - 当使用%n时发出的字符是与平台有关的(在不同平台上会有所变化),而\n将始终发出U+000A。现在,你可能希望你的代码依赖于特定平台,以便发出该平台的惯用换行符-但我认为说它是平台无关的是不公平的。 - Jon Skeet
这里所说的 %n 的使用在多个平台上都是可移植的,因此从用户的角度来看,它是平台无关的。 - Abimaran Kugathasan
1
当有人告诉我某个东西是“平台无关”的时候,我想到的不是这个样子——这意味着它在任何平台上都表现相同。如果你删掉第一段,我认为你的回答可能会更好。 - Jon Skeet
嗯...如果是一个API发出的文本内容呢? - pinkpanther
1
学到了新东西。20年来一直在双引号内使用\n,期望它是特定于平台的换行符。奇怪的是,我从未遇到过问题或注意到这一点。这一定意味着我的工具链在复制和/或读取文件时始终足够适应,以至于我没有注意到!:--)但我总是在Windows、Linux、各种Unix和偶尔的Mac之间移动代码。我总是不得不调整脚本文件和各种其他文件的行尾。但Java文件输出不需要...我记得...哎呀! - Charlie Reitzel

2

%n 是格式化字符串中表示换行符(可能是 \r\n 或 \n)的特殊代码(占位符),而 \n 则是实际的符号。

您可以将 %n 视为将在结果字符串中被 \r\n 或 \n 替换的符号。


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