Что с Java "% n" в printf?

Я читаю Effective Java и использует символ %n для символа новой строки везде. Я использовал \n довольно успешно для новой строки в Java-программах.

Какой из них "правильный"? Что случилось с \n? Почему Java изменила это соглашение C?

Ответ 1

Из быстрого google:

Существует также один спецификатор, который не соответствует аргументу. Это "% n", который выводит разрыв строки. В некоторых случаях также можно использовать "\n", но поскольку "% n" всегда выводит правильный разделитель строк на платформе, он переносится по платформам, тогда как "\n" не является.

Пожалуйста, обратитесь https://docs.oracle.com/javase/tutorial/java/data/numberformat.html

Исходный источник

Ответ 3

Хотя \n является правильным символом новой строки для систем на основе Unix, другие системы могут использовать разные символы для представления конца строки. В частности, система Windows использует \r\n, а ранние системы MacOS используют \r.

Используя %n в вашей строке формата, вы скажете Java использовать значение, возвращаемое System.getProperty("line.separator"), которое является разделителем строк для текущей системы.

Ответ 4

Предупреждение: если вы используете код NETWORKING, вы можете предпочесть определенность \n, в отличие от% n, которая может отправлять разные символы по сети, в зависимости от того, на какой платформе она работает.

Ответ 5

"Правильно" зависит от того, что именно вы пытаетесь сделать.

\n всегда даст вам окончание строки "unix style". \ r\n всегда будет давать вам строку "dos style". % n даст вам строку, заканчивающуюся для платформы, на которой вы работаете

C обрабатывает это по-другому. Вы можете открыть файл в режиме "текст" или "двоичный". Если вы откроете файл в двоичном режиме, \n даст вам окончание строки "unix style", а "\ r\n" даст вам строку "dos style". Если вы откроете файл в "текстовом" режиме в системе dos/windows, тогда, когда вы пишете \n, код обработки файлов преобразует его в \r\n. Таким образом, открыв файл в текстовом режиме и используя \n, вы получите окончательную строку конкретной платформы.

Я могу понять, почему дизайнеры java не захотели реплицировать C-взломанные идеи относительно "текстовых" и "двоичных" файловых режимов.

Ответ 6

В java, \n всегда генерирует символ tfc tfc. Чтобы получить правильный разделитель строк для конкретной платформы, используйте %n.

Так что используйте \n, если вы уверены, что вам нужен символ tfc t1, ​​например, в сети.
Во всех остальных ситуациях используйте %n

Ответ 7

Обратите внимание, что эти ответы действительны только при использовании объектов System.out.printf() или System.out.format() или Formatter. Если вы используете %n в System.out.println(), он просто произведет %n, а не новую строку.

Ответ 8

Спецификатор формата

% n - это разделитель строк, который переносится через операционные системы. Однако он не может использоваться в качестве аргумента для функций System.out.print или System.out.println.

Рекомендуется использовать эту новую версию разделителя строк выше\n.