web-dev-qa-db-ger.com

Was ist los mit Javas "% n" in printf?

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?

88
ripper234

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

Originalquelle

124
Bill K

%n ist portabelübergreifend \n nicht.

Siehe die Formatierungsstringsyntax in der Referenzdokumentation :

'n' Zeilentrennzeichen Das Ergebnis ist die plattformspezifisches Zeilentrennzeichen

25
Gregory Pakosz

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.

23
Craig Putnam

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.

15
George Forman

"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.

7
Peter Green

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

4
Fathah Rehman P

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.

3
user1677663

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.

0
Piyush P