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?
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.
@ 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
30
%n es portátil a través de plataformas
\n no lo es.
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.
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.
"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".
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
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.
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.
\n
a una nueva línea específica de la plataforma en formato de texto, vea esto , Java no lo hace)Respuestas:
De un google rápido:
Consulte https://docs.oracle.com/javase/tutorial/java/data/numberformat.html
Fuente original
fuente
%n
es portátil a través de plataformas\n
no lo es.Consulte la sintaxis de la cadena de formato en la documentación de referencia :
fuente
Si bien
\n
es 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\n
y los primeros sistemas MacOS utilizados\r
.Al usar
%n
en su cadena de formato, le dice a Java que use el valor devuelto porSystem.getProperty("line.separator")
, que es el separador de línea para el sistema actual.fuente
Advertencia:
Si está haciendo código de RED, es posible que prefiera la certeza de
\n
, en lugar de%n
que puede enviar diferentes caracteres a través de la red, dependiendo de la plataforma en la que se esté ejecutando.fuente
"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".
fuente
En Java,
\n
siempre genere un\u000A
cará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
\n
cuando esté seguro de que necesita un\u000A
carácter de salto de línea, por ejemplo, en redes.En todas las demás situaciones utilice
%n
fuente
Tenga en cuenta que estas respuestas solo son verdaderas cuando se usa
System.out.printf()
oSystem.out.format()
o elFormatter
objeto. Si usa%n
inSystem.out.println()
, simplemente producirá una%n
, no una nueva línea.fuente
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.
fuente