2009-12-10 11 views
72

Estoy leyendo Effective Java y usa %n para el carácter de nueva línea en todas partes. He usado \n con bastante éxito para la nueva línea en los programas de Java.¿Qué pasa con "% n" de Java en printf?

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

+1

Solo una conjetura, pero: soporte multiplataforma. Los diferentes sistemas usan diferentes caracteres para líneas nuevas, p. \ n vs. \ r \ n. C# tiene Environment.NewLine para el mismo propósito. –

+0

Java también tiene algo en Sistema, pero% n es más fácil en una impresión. –

+0

¿Por qué java cambió esta convención c == +1, :) –

Respuesta

107

Desde una rápida Google:

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

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

Original source

+3

donde "separador de línea correcta" es en gran medida arbitrario en función del contexto utilizado ... – user2864740

+0

@ user2864740 Es verdad, no da salida al separador de línea específico de la plataforma _correct_ pero el _current_. –

19

Mientras \n es el carácter de nueva línea correcta para los sistemas basados ​​en Unix, otros sistemas puede usar diferentes caracteres para representar el final de una línea. En particular, el sistema de Windows usa \r\n, y los primeros sistemas MacOS usan \r.

Al usar %n en 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.

13

Advertencia: si está haciendo código de NETWORKING, puede preferir la certeza de \ n, a diferencia de% n, que puede enviar diferentes caracteres a través de la red, dependiendo de la plataforma en la que se esté ejecutando.

7

"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á la terminación de línea para la plataforma que está ejecutando en

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 "dos estilo". Si abre el archivo en modo "texto" en un sistema dos/windows, cuando escriba \ n, el código de manejo del archivo lo convierte en \ r \ n. Entonces, al abrir un archivo en modo texto y al usar \ n, obtiene el final de línea específico de la plataforma.

Entiendo por qué los diseñadores de java no quisieron replicar las ideas hacky de C con respecto a los modos de archivo "texto" y "binario".

4

En java, \n siempre genera \u000A carácter de salto de línea. Para obtener el separador de línea correcto para el uso particular de la plataforma %n.

Así que use \n cuando esté seguro de que necesita \u000A carácter de salto de línea, por ejemplo, en una red.
En todas las demás situaciones de uso %n

1

Aviso estas respuestas son sólo es cierto cuando se utiliza System.out.printf() o System.out.format() o el objeto Formatter. Si usa %n en System.out.println(), simplemente generará %n, no una nueva línea.

0

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

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