Каковы различия между символьными литералами '\ n' и '\ r' в Java? - PullRequest
60 голосов
/ 13 февраля 2012

В Java символы новой строки и возврата каретки, похоже, показывают одинаковый эффект.

Каковы фактические различия между символами \n и \r в Java?


Обратите внимание, что приведенный выше запрос касается \n символа , а не функции newLine() для BufferedWriter, и поэтому этот другой вопрос не имеет отношения.

Ответы [ 6 ]

84 голосов
/ 13 февраля 2012

\n - символ перевода строки (LF), код символа 10. \r - символ возврата каретки (CR), код символа 13. То, что они делают, отличается от системы к системе.Например, в Windows строки в текстовых файлах заканчиваются с помощью CR, за которым сразу следует LF (например, CRLF).В системах Unix и их производных используется только LF.(Mac до Mac OS X использовал CR, но Mac OS X является производной * nix и поэтому использует LF.)

В старые времена LF буквально переводил строки на принтеры (двигаясь вниз на одну строкуне перемещаясь туда, где вы находитесь на странице горизонтально), и CR аналогично перемещается назад к началу строки без перемещения бумаги вверх, поэтому некоторые системы (например, Windows) отправляют CR (возврат к левой руке).side) и LF (и подайте бумагу).

Из-за всей этой путаницы некоторые выходные объекты будут принимать несколько последовательностей разрыва строки, так что вы можете увидеть один и тот же эффект от любого символа в зависимости от того, что вывывод к.

49 голосов
/ 13 февраля 2012

\n для unix
\r для Mac (до OS X)
\r\n для формата Windows

вы также можете взять System.getProperty("line.separator")

это даст вам соответствующую вашей ОС

14 голосов
/ 13 февраля 2012

Зависит от того, на какой платформе вы работаете.Для получения правильного результата используйте -

System.getProperty("line.separator")
5 голосов
/ 13 февраля 2012

Разница не в Java, а в платформе. Исторически UNIX-подобные ОС использовали \n в качестве символа новой строки, некоторые другие устаревшие ОС использовали \r, а ОС Windows использовали \r\n.

2 голосов
/ 13 февраля 2012

Это на самом деле зависит от того, что используется для печати результата.Как правило, результат такой же, как вы говорите:

Исторически возврат каретки должен делать то же, что и кнопка home: вернуть каретку в начало строки.

\n должен дать вам новую строку, но не сдвинуть каретку.

Если вы думаете о старых принтерах, вы в значительной степени думаете, как думали авторы оригинальных наборов символов.Это другая операция - перемещение устройства подачи бумаги и перемещение каретки.Эти два символа выражают эту разницу.

0 голосов
/ 20 ноября 2015

Когда вы печатаете строку в консоли (Eclipse), \ n, \ r и \ r \ n имеют одинаковый эффект, все они дадут вам новую строку, но \ n \ r (также \ n \ n , \ r \ r) даст вам две новые строки, когда вы записываете строку в файл, только \ r \ n может дать вам новую строку.

...