I'm reading Effective Java and it uses %n
for the newline character everywhere. I have used \n
rather successfully for newline in Java programs.
Which is the 'correct' one? What's wrong with \n
? Why did Java change this C convention?
I'm reading Effective Java and it uses %n
for the newline character everywhere. I have used \n
rather successfully for newline in Java programs.
Which is the 'correct' one? What's wrong with \n
? Why did Java change this C convention?
Notice these answers are only true when using
System.out.printf()
orSystem.out.format()
or theFormatter
object. If you use%n
inSystem.out.println()
, it will simply produce a%n
, not a newline.%n
is portable accross platforms\n
is not.See the formatting string syntax in the reference documentation:
From a quick google:
Please refer https://docs.oracle.com/javase/tutorial/java/data/numberformat.html
Original source
In java,
\n
always generate\u000A
linefeed character. To get correct line separator for particular platform use%n
.So use
\n
when you are sure that you need\u000A
linefeed character, for example in networking.In all other situations use
%n
"correct" depends on what exactly it is you are trying to do.
\n will always give you a "unix style" line ending. \r\n will always give you a "dos style" line ending. %n will give you the line ending for the platform you are running on
C handles this differently. You can choose to open a file in either "text" or "binary" mode. If you open the file in binary mode \n will give you a "unix style" line ending and "\r\n" will give you a "dos style" line ending. If you open the file in "text" mode on a dos/windows system then when you write \n the file handling code converts it to \r\n. So by opening a file in text mode and using \n you get the platform specific line ending.
I can see why the designers of java didn't want to replicate C's hacky ideas regarding "text" and "binary" file modes.
While
\n
is the correct newline character for Unix-based systems, other systems may use different characters to represent the end of a line. In particular, Windows system use\r\n
, and early MacOS systems used\r
.By using
%n
in your format string, you tell Java to use the value returned bySystem.getProperty("line.separator")
, which is the line separator for the current system.