¿Qué pasa con "% n" de Java en printf?


107

Estoy leyendo Effective Java y se usa %npara el carácter de nueva línea en todas partes. He utilizado con \nbastante éxito la nueva línea en programas Java.

¿Cual es la correcta? ¿Qué pasa con \n? ¿Por qué Java cambió esta convención de C?


1
Solo una suposición, pero: soporte multiplataforma. Los diferentes sistemas utilizan diferentes caracteres para las nuevas líneas, por ejemplo, \ n frente a \ r \ n. C # tiene Environment.NewLine para el mismo propósito.
Jordan Running

Java también tiene algo en System, pero% n es más fácil en printf.
Paul Tomblin

¿Por qué Java cambió esta convención c == +1, :)
Michael Dimmitt

No es un cambio, una adición / mejora. \ n todavía significa \ n
Bill K

(nota para los futuros lectores: C ya se convierte automáticamente \na una nueva línea específica de la plataforma en formato de texto, vea esto , Java no lo hace)
user202729

Respuestas:


150

De un google rápido:

También hay un especificador que no corresponde a un argumento. Es "% n" el que genera un salto de línea. También se puede usar "\ n" en algunos casos, pero como "% n" siempre genera el separador de línea específico de la plataforma correcto, es portátil entre plataformas, mientras que "\ n" no lo es.

Consulte https://docs.oracle.com/javase/tutorial/java/data/numberformat.html

Fuente original


@ user2864740 Eso es cierto, no genera el separador de línea correcto específico de la plataforma, sino el actual .
Hauke ​​Ingmar Schmidt

umm, ¿qué significa eso?
Kalpesh Soni

Creo que usa el del sistema operativo actual en el que se está ejecutando, pero si se ejecuta en Linux y genera código para Windows, es posible que no sea lo que busca. De lo contrario, no estoy seguro de a qué se referían los otros dos comentaristas.
Bill K


24

Si bien \nes el carácter de nueva línea correcto para los sistemas basados ​​en Unix, otros sistemas pueden usar diferentes caracteres para representar el final de una línea. En particular, el uso del sistema Windows \r\ny los primeros sistemas MacOS utilizados \r.

Al usar %nen su cadena de formato, le dice a Java que use el valor devuelto por System.getProperty("line.separator"), que es el separador de línea para el sistema actual.


18

Advertencia:

Si está haciendo código de RED, es posible que prefiera la certeza de \n, en lugar de %nque puede enviar diferentes caracteres a través de la red, dependiendo de la plataforma en la que se esté ejecutando.


8

"correcto" depende de qué es exactamente lo que está tratando de hacer.

\ n siempre le dará un final de línea "estilo Unix". \ r \ n siempre le dará un final de línea "estilo dos". % n le dará el final de línea para la plataforma en la que está ejecutando

C maneja esto de manera diferente. Puede elegir abrir un archivo en modo "texto" o "binario". Si abre el archivo en modo binario, \ n le dará un final de línea "estilo unix" y "\ r \ n" le dará un final de línea "estilo dos". Si abre el archivo en modo "texto" en un sistema DOS / Windows, cuando escribe \ n, el código de manejo de archivos lo convierte a \ r \ n. Entonces, al abrir un archivo en modo texto y usar \ n, obtienes el final de línea específico de la plataforma.

Puedo ver por qué los diseñadores de Java no querían replicar las ideas hacky de C sobre los modos de archivo "texto" y "binario".


4

En Java, \nsiempre genere un \u000Acarácter de salto de línea. Para obtener el separador de línea correcto para un uso de plataforma particular%n .

Por lo tanto, utilícelo \ncuando esté seguro de que necesita un \u000Acarácter de salto de línea, por ejemplo, en redes.
En todas las demás situaciones utilice%n


4

Tenga en cuenta que estas respuestas solo son verdaderas cuando se usa System.out.printf()o System.out.format()o el Formatterobjeto. Si usa %nin System.out.println(), simplemente producirá una %n, no una nueva línea.


0

El especificador de formato% n es un separador de líneas que es portátil en todos los sistemas operativos. Sin embargo, no se puede utilizar como argumento para las funciones System.out.print o System.out.println.

Siempre se recomienda utilizar esta nueva versión del separador de líneas anterior \ n.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.