2012-02-13 16 views
53

En Java, los caracteres de nueva línea y retorno de carro parecen tener el mismo efecto.¿Cuáles son las diferencias entre los caracteres literales ' n' y ' r' en Java?

¿Cuáles son las diferencias reales entre los literales de caracteres \n y \r en Java?


Tenga en cuenta que lo anterior se pregunta acerca de la \n carácter, no la función newLine() en BufferedWriter, y así this other question no es relevante.

+0

@ T.J.Crowder: ¿Le importa [edit] ing hacer esa distinción más clara? – Will

+1

@Will: pensé que estaba perfectamente claro en primer lugar, pero aparentemente no me dieron los votos cercanos. :-) He agregado una posdata. –

Respuesta

71

\n es un carácter de avance de línea (LF), código de carácter 10. \r es un carácter de retorno de carro (CR), código de carácter 13. Lo que hacen difiere de un sistema a otro. En Windows, por ejemplo, las líneas en los archivos de texto se terminan usando CR seguido de inmediato por LF (por ejemplo, CRLF). En los sistemas Unix y sus derivados, solo se usa LF. (Mac antes de Mac OS X usaba CR, pero Mac OS X es un derivado * nix y así usa LF.)

En los viejos tiempos, LF literalmente hacía solo una línea de alimentación en impresoras (moviéndose por una línea sin moverse donde está horizontalmente en la página), y CR se movió de nuevo al principio de la línea sin moviendo el papel hacia arriba, de ahí que algunos sistemas (como Windows) envíen CR (retorno al lado izquierdo) y LF (y alimentar el papel).

Debido a toda esta confusión, algunos objetivos de salida aceptarán secuencias de salto de línea múltiples, por lo que puede ver el mismo efecto de cualquiera de los caracteres dependiendo de lo que está produciendo.

5

La diferencia no es específica de Java, sino específica de la plataforma. Históricamente los sistemas operativos tipo UNIX han utilizado \n como caracteres de nueva línea, algunos otros SO obsoletos han utilizado \r y los sistemas operativos de Windows han empleado \r\n.

1

Depende realmente de qué se está utilizando para imprimir el resultado. Por lo general, el resultado es el mismo, como dices:

Históricamente, el retorno de carro se supone que tiene que ver con lo que hace el botón home: devuelve el símbolo de intercalación al inicio de la línea.

Se supone que \n le da una nueva línea pero no mueve el cursor.

Si piensas en las impresoras antiguas, estás pensando en cómo pensaban los autores originales de los conjuntos de caracteres. Es una operación diferente moviendo el alimentador de papel y moviendo el cursor. Estos dos personajes expresan esa diferencia.

13

Depende de qué plataforma trabaje.Para obtener el uso resultado correcto -

System.getProperty("line.separator") 
39

\n es para UNIX
\r es para mac
\r\n es para el formato de ventanas

también se puede tomar System.getProperty("line.separator")

se le dará la adecuada a su sistema operativo

+5

En Java 7 en adelante, puede usar 'System.lineSeparator()' – Adam6806

+0

explicado de una manera simple. gracias. – Arundev

0

Cuando imprime una cadena en la consola (Eclipse), \ n, \ r y \ r \ n tienen el mismo efecto, todos ellos le darán una nueva línea, pero \ n \ r (también \ n \ n, \ r \ r) le dará dos líneas nuevas; escribe una cadena en un archivo, solo \ r \ n puede darle una nueva línea.

Cuestiones relacionadas