我正在阅读有效的Java,它%n
在各处都用于换行符。我已经\n
相当成功地在Java程序中使用了换行符。
哪个是“正确”的?这有什么错\n
?Java为什么要更改此C约定?
\n
以文本格式自动转换为平台特定的换行符,请参阅此,Java则没有)
我正在阅读有效的Java,它%n
在各处都用于换行符。我已经\n
相当成功地在Java程序中使用了换行符。
哪个是“正确”的?这有什么错\n
?Java为什么要更改此C约定?
\n
以文本格式自动转换为平台特定的换行符,请参阅此,Java则没有)
Answers:
从快速的Google:
还有一个说明符与一个参数不对应。输出行的是“%n”。在某些情况下,也可以使用“ \ n”,但是由于“%n”始终输出正确的平台特定的行分隔符,因此它可以跨平台移植,而“ \ n”则不能。
请参考 https://docs.oracle.com/javase/tutorial/java/data/numberformat.html
“正确”取决于您要尝试执行的操作。
\ n将始终为您提供“ unix样式”行结尾。\ r \ n将始终为您提供“ dos风格”行的结尾。%n将为您提供所运行平台的行尾
C处理此问题的方式有所不同。您可以选择以“文本”或“二进制”模式打开文件。如果以二进制模式打开文件,\ n将为您提供“ unix样式”行结尾,而“ \ r \ n”将为您提供“ dos样式”行结尾。如果在dos / windows系统上以“文本”模式打开文件,则在编写\ n时,文件处理代码会将其转换为\ r \ n。因此,通过以文本模式打开文件并使用\ n,您可以获得平台特定的行结尾。
我可以看到为什么Java的设计人员不想复制C关于“文本”和“二进制”文件模式的怪异想法。
在Java中,\n
始终生成\u000A
换行符。为特定平台使用正确的行分隔符%n
。
因此\n
,在确定需要\u000A
换行符时使用,例如在网络中。
在所有其他情况下使用%n
%n格式说明符是可在操作系统之间移植的行分隔符。但是,它不能用作System.out.print或System.out.println函数的参数。
始终建议在\ n上方使用此新版本的行分隔符。