2012-02-13 5 views
53

В Java символы новой строки и символа возврата каретки кажутся одинаковыми.Каковы различия между символами символов n и r в Java?

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


Обратите внимание, что выше спрашивает о характере \n, а не newLine() функции на BufferedWriter, и поэтому this other question не имеет значения.

+0

@ T.J.Crowder: Не возражаете ли вы, чтобы сделать это различие более ясным? – Will

+1

@Will: Я думал, что это было совершенно ясно, в первую очередь, но, по-видимому, не дали близких голосов. :-) Я добавил постскриптум. –

ответ

71

\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 (возврат в левую сторону) и LF (и подайте бумагу вверх).

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

5

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

1

Фактически это зависит от того, что используется для печати результата. Как правило, результат такой же, как вы говорите -

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

\n Предполагается, что вы получите новую линию, но не переместите каретку.

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

13

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

System.getProperty("line.separator") 
39

\n для UNIX
\r для макинтош
\r\n для формата окна

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

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

+5

В Java 7 и выше вы можете использовать 'System.lineSeparator()' – Adam6806

+0

, объясненный простым способом. Спасибо. – Arundev

0

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

Смежные вопросы