Ich lese effektiv Java und es verwendet %n
für das Newline-Zeichen überall. Ich habe \n
ziemlich erfolgreich für Newline in Java-Programmen verwendet.
Welches ist das "Richtige"? Was ist los mit \n
? Warum hat Java diese C-Konvention geändert?
Von einem schnellen google:
Es gibt auch einen Bezeichner, der keinem Argument entspricht. "% N" gibt einen Zeilenumbruch aus. In einigen Fällen kann auch ein "\ n" verwendet werden. Da "% n" jedoch immer das richtige plattformspezifische Zeilentrennzeichen ausgibt, ist es für alle Plattformen portierbar, während "\ n" dies nicht ist.
Bitte beziehen Sie sich auf https://docs.Oracle.com/javase/tutorial/Java/data/numberformat.html
%n
ist portabelübergreifend \n
nicht.
Siehe die Formatierungsstringsyntax in der Referenzdokumentation :
'n' Zeilentrennzeichen Das Ergebnis ist die plattformspezifisches Zeilentrennzeichen
Während \n
für Unix-basierte Systeme das richtige Newline-Zeichen ist, verwenden andere Systeme möglicherweise andere Zeichen, um das Ende einer Zeile darzustellen. Insbesondere verwenden Windows-Systeme \r\n
und frühe MacOS-Systeme \r
.
Durch die Verwendung von %n
in Ihrer Formatzeichenfolge weisen Sie Java an, den von System.getProperty("line.separator")
zurückgegebenen Wert zu verwenden, der das Trennzeichen für das aktuelle System ist.
Warnung: Wenn Sie NETWORKING-Code erstellen, bevorzugen Sie möglicherweise die Sicherheit von\n, im Gegensatz zu% n, das möglicherweise unterschiedliche Zeichen über das Netzwerk sendet, je nachdem auf welcher Plattform es ausgeführt wird.
"richtig" hängt davon ab, was genau Sie zu tun versuchen.
\ n gibt Ihnen immer eine "Unix-Stil" -Zeile mit der Endung .\r\n gibt Ihnen immer eine "Dos-Stil" -Zeile mit der Endung .% n gibt Ihnen die Zeilenende für die Plattform, die Sie ausführen auf
C behandelt das anders. Sie können eine Datei entweder im Text- oder im Binärmodus öffnen. Wenn Sie die Datei im Binärmodus öffnen, erhalten Sie eine Endung mit "Unix-Stil" und "\ r\n" eine Endung mit "DOS-Stil". Wenn Sie die Datei im "Text" -Modus auf einem DOS/Windows-System öffnen, konvertiert der Dateibearbeitungscode beim Schreiben\n\n\n. Wenn Sie also eine Datei im Textmodus öffnen und\n verwenden, erhalten Sie das plattformspezifische Zeilenende.
Ich kann sehen, warum die Entwickler von Java die hackigen Ideen von C in Bezug auf "Text" - und "Binär" -Dateimodi nicht replizieren wollten.
In Java generiert \n
immer \u000A
Zeilenvorschubzeichen. Um das richtige Trennzeichen für eine bestimmte Plattform zu erhalten, verwenden Sie %n
.
Verwenden Sie also \n
, wenn Sie sicher sind, dass Sie \u000A
-Zeilenvorschubzeichen benötigen, z. B. in Netzwerken.
In allen anderen Situationen verwenden Sie %n
Beachten Sie, dass diese Antworten nur zutreffen, wenn Sie System.out.printf()
oder System.out.format()
oder das Objekt Formatter
verwenden. Wenn Sie %n
in System.out.println()
verwenden, wird einfach ein %n
ausgegeben, keine Zeile.
Der Formatbezeichner% n ist ein Zeilentrenner, der für alle Betriebssysteme portierbar ist. Es kann jedoch nicht als Argument für die Funktionen System.out.print oder System.out.println verwendet werden.
Es wird immer empfohlen, diese neue Version des Zeilentrennzeichens über\n zu verwenden.