2012-02-13 33 views
53

Trong Java, các ký tự trả về dòng mới và ký tự vận chuyển đều có vẻ giống nhau.Sự khác nhau giữa char literals ' n' và ' r' trong Java là gì?

Sự khác biệt thực sự giữa char literals \n\r bằng Java là gì?


Lưu ý rằng các yêu cầu nêu trên về \nnhân vật, không phải là newLine() chức năng trên BufferedWriter, vv this other question là không có liên quan.

+0

@ T.J.Crowder: Bạn có phiền [sửa] để làm cho sự khác biệt đó rõ ràng hơn không? – Will

+1

@Will: Tôi nghĩ nó đã hoàn toàn rõ ràng ngay từ đầu, nhưng dường như không được đưa ra các phiếu bầu. :-) Tôi đã thêm một postscript. –

Trả lời

71

\n là ký tự dòng cấp dữ liệu (LF), mã ký tự 10. \r là ký tự trả về (CR), mã ký tự 13. Những gì chúng khác với hệ thống. Ví dụ, trên Windows, các dòng trong các tệp văn bản được chấm dứt bằng CR theo sau ngay lập tức bởi LF (ví dụ: CRLF). Trên các hệ thống Unix và các dẫn xuất của chúng, chỉ sử dụng LF. (Mac trước Mac OS X đã sử dụng CR, nhưng Mac OS X là một dẫn xuất * nix và do đó sử dụng LF.)

Trong những ngày cũ, LF theo nghĩa đen chỉ làm một dòng trên máy in (di chuyển xuống một dòng mà không cần di chuyển nơi bạn đang ở trên trang) và CR tương tự chuyển về đầu dòng mà không cần di chuyển giấy lên, do đó một số hệ thống (như Windows) gửi CR (trở về phía bên trái) và LF (và nạp giấy lên).

Vì tất cả sự nhầm lẫn này, một số mục tiêu đầu ra sẽ chấp nhận nhiều chuỗi ngắt dòng, vì vậy bạn có thể thấy cùng một hiệu ứng từ một trong hai ký tự tùy thuộc vào những gì bạn đang xuất.

5

Sự khác biệt không phải là Java cụ thể, mà là nền tảng cụ thể. Các hệ điều hành giống UNIX lịch sử đã sử dụng \n làm ký tự dòng mới, một số hệ điều hành không dùng nữa đã sử dụng \r và các hệ điều hành Windows đã sử dụng \r\n.

1

Nó thực sự phụ thuộc vào những gì đang được sử dụng để in kết quả. Thông thường, kết quả giống nhau, giống như bạn nói -

Quay lại lịch sử vận ​​chuyển được cho là phải làm gì về nút home thực hiện: trả lại dấu mũ để bắt đầu dòng.

\n được cho là cung cấp cho bạn một dòng mới nhưng không di chuyển dấu mũ.

Nếu bạn nghĩ về máy in cũ, bạn đang suy nghĩ khá nhiều về cách tác giả gốc của bộ ký tự suy nghĩ. Đó là một hoạt động khác nhau di chuyển khay giấy và di chuyển dấu mũ. Hai nhân vật này thể hiện sự khác biệt đó.

13

Tùy thuộc vào Nền tảng bạn làm việc.Để có được kết quả sử dụng đúng -

System.getProperty("line.separator") 
39

\n là dành cho unix
\r là dành cho mac
\r\n là dành cho định dạng cửa sổ

bạn cũng có thể tận System.getProperty("line.separator")

nó sẽ cung cấp cho bạn thích hợp vào hệ điều hành của bạn

+5

Trong Java 7 trở lên, bạn có thể sử dụng 'System.lineSeparator()' – Adam6806

+0

được giải thích một cách đơn giản. cảm ơn bạn. – Arundev

0

Khi bạn in một chuỗi trong bảng điều khiển (Eclipse), \ n, \ r và \ r \ n có cùng tác dụng, tất cả chúng sẽ cho bạn một dòng mới, nhưng \ n \ r (cũng \ n \ n, \ r \ r) sẽ cung cấp cho bạn hai dòng mới, khi bạn viết một chuỗi vào một tệp, chỉ \ r \ n có thể cung cấp cho bạn một dòng mới.

Các vấn đề liên quan