Только предположение, но: кроссплатформенная поддержка. В разных системах для перевода строки используются разные символы, например \ n против \ r \ n. В C # для той же цели есть Environment.NewLine.
Jordan Running
У Java тоже есть кое-что в System, но% n проще в printf.
Пол Томблин,
почему java изменила это соглашение c == +1, :)
Майкл Диммитт
Не изменение, а дополнение / улучшение. \ n по-прежнему означает \ n
Билл К.
(примечание для будущих читателей: C уже автоматически конвертирует \nновую строку в текстовый формат для конкретной платформы, см. это , Java этого не делает)
user202729
Ответы:
150
Из быстрого Google:
Также есть один спецификатор, который не соответствует аргументу. Это "% n", которое выводит разрыв строки. В некоторых случаях также можно использовать "\ n", но поскольку "% n" всегда выводит правильный разделитель строк, зависящий от платформы, он переносится между платформами, а "\ n" - нет.
@ user2864740 Это правда, он выводит не правильный разделитель строк для конкретной платформы, а текущий .
Хауке Ингмар Шмидт
ммм, что это значит?
Kalpesh Soni
Я считаю, что он использует тот, который используется в текущей ОС, но если он работает в Linux и выводит код для Windows, это может быть не то, что вам нужно. Я не совсем уверен, что могли иметь в виду два других комментатора.
Хотя \nэто правильный символ новой строки для систем на базе Unix, другие системы могут использовать другие символы для обозначения конца строки. В частности, использовались системы 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 относительно "текстового" и "двоичного" файловых режимов.
Обратите внимание, что эти ответы верны только при использовании System.out.printf()или System.out.format()или Formatterобъекта. Если вы используете %nin System.out.println(), он просто создаст a %n, а не новую строку.
Спецификатор формата% n - это разделитель строк, переносимый между операционными системами. Однако его нельзя использовать в качестве аргумента для функций System.out.print или System.out.println.
Всегда рекомендуется использовать эту новую версию разделителя строк над \ n.
\n
новую строку в текстовый формат для конкретной платформы, см. это , Java этого не делает)Ответы:
Из быстрого Google:
См. Https://docs.oracle.com/javase/tutorial/java/data/numberformat.html
Первоисточник
источник
%n
переносится на разные платформы\n
- нет.См. Синтаксис строки форматирования в справочной документации :
источник
Хотя
\n
это правильный символ новой строки для систем на базе Unix, другие системы могут использовать другие символы для обозначения конца строки. В частности, использовались системы 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
.Поэтому используйте,
\n
если вы уверены, что вам нужен\u000A
символ перевода строки, например, в сети.Во всех остальных ситуациях используйте
%n
источник
Обратите внимание, что эти ответы верны только при использовании
System.out.printf()
илиSystem.out.format()
илиFormatter
объекта. Если вы используете%n
inSystem.out.println()
, он просто создаст a%n
, а не новую строку.источник
Спецификатор формата% n - это разделитель строк, переносимый между операционными системами. Однако его нельзя использовать в качестве аргумента для функций System.out.print или System.out.println.
Всегда рекомендуется использовать эту новую версию разделителя строк над \ n.
источник