Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么';它支持Java';s";%";在printf中?_Java_Newline_Printf - Fatal编程技术网

什么';它支持Java';s";%";在printf中?

什么';它支持Java';s";%";在printf中?,java,newline,printf,Java,Newline,Printf,我正在阅读有效的Java,它使用%n作为换行符。我在Java程序中相当成功地将\n用于换行符 哪个是正确的?\n有什么问题吗?为什么Java改变了这个C约定?从一个快速的google: 还有一个说明符与参数不对应。输出换行符的是“%n”。在某些情况下也可以使用“\n”,但由于“%n”始终输出正确的平台特定行分隔符,因此它可以跨平台移植,而“\n”则不能 请参阅 %n可跨平台移植 \n不是 见: “n”行分隔符结果为 平台专用线分离器 对于基于Unix的系统,\n是正确的换行符,但其他系统可能会

我正在阅读有效的Java,它使用
%n
作为换行符。我在Java程序中相当成功地将
\n
用于换行符

哪个是正确的?
\n
有什么问题吗?为什么Java改变了这个C约定?

从一个快速的google:

还有一个说明符与参数不对应。输出换行符的是“%n”。在某些情况下也可以使用“\n”,但由于“%n”始终输出正确的平台特定行分隔符,因此它可以跨平台移植,而“\n”则不能

请参阅


%n
可跨平台移植
\n
不是

见:

“n”行分隔符结果为 平台专用线分离器


对于基于Unix的系统,
\n
是正确的换行符,但其他系统可能会使用不同的字符来表示行尾。特别是,Windows系统使用
\r\n
,早期的MacOS系统使用
\r


通过在格式字符串中使用
%n
,可以告诉Java使用
System.getProperty(“line.separator”)
返回的值,该值是当前系统的行分隔符。

警告:

如果您正在编写网络代码,您可能更喜欢肯定的
\n
,而不是
%n
,后者可能会通过网络发送不同的字符,具体取决于它运行的平台。

“正确”取决于您正试图执行的操作

\n总是给你一个“unix风格”的行尾。 \r\n将始终为您提供“dos样式”行结尾。 %n将为您提供正在运行的平台的行尾

C以不同的方式处理这个问题。您可以选择以“文本”或“二进制”模式打开文件。如果以二进制模式打开文件,\n将显示“unix样式”行结尾,“\r\n”将显示“dos样式”行结尾。如果在dos/windows系统上以“文本”模式打开文件,则在写入文件时,\n文件处理代码会将其转换为\r\n。因此,通过以文本模式打开文件并使用\n,可以获得平台特定的行结尾


我明白为什么java的设计者不想复制C关于“文本”和“二进制”文件模式的拙劣想法。

在java中,
\n
总是生成
\u000A
换行符。要为特定平台获取正确的行分隔符,请使用
%n

因此,如果您确定需要
\u000A
换行符,请使用
\n
,例如在网络中

在所有其他情况下,请使用
%n

注意,只有在使用
System.out.printf()
System.out.format()
格式化程序
对象时,这些答案才是正确的。如果在
System.out.println()
中使用
%n
,它只会生成一个
%n
,而不是换行符。

%n格式说明符是一个跨操作系统可移植的行分隔符。但是,它不能用作System.out.print或System.out.println函数的参数


始终建议使用上述新版本的行分隔符。\n.

只是猜测,但是:跨平台支持。不同的系统使用不同的换行符,例如。\n vs。\r\n。C#有Environment.NewLine用于同样的目的。Java在系统中也有一些东西,但在printf中%n更容易。为什么Java要更改此C约定==+1,:)不是更改,而是添加/增强\n仍然意味着\n(未来读者注意:C已经自动将
\n
转换为特定于平台的文本格式换行符,请看,Java没有)@user2864740是的,它没有输出正确的特定于平台的行分隔符,但输出的是当前的行分隔符。嗯,这意味着什么?我相信它使用的是当前运行的操作系统的行分隔符,但是,如果它运行在Linux上并输出windows代码,那么它可能不是您想要的。我不确定其他两位评论者可能指的是什么。参见