2008-10-16 4 views

Respuesta

333

Además de la propiedad line.separator, si está utilizando Java 1.5 o posterior y la String.Format (u otro formatear métodos) que puede utilizar %n como en

Calendar c = ...; 
String s = String.format("Duke's Birthday: %1$tm %1$te,%1$tY%n", c); 
//Note `%n` at end of line         ^^ 

String s2 = String.format("Use %%n as a platform independent newline.%n"); 
//   %% becomes %  ^^ 
//          and `%n` becomes newline ^^ 

Ver el Java 1.8 API for Formatter para más detalles.

+6

¡Gracias! Estoy seguro de que System.getProperty ("line.separator"); tiene sus usos, pero me canso de ver: "Línea 1" + System.getProperty ("line.separator") + "Línea 2" – Buttons840

+34

Oh, "Línea 1" + System.getProperty ("line.separator") + "Línea 2" es de hecho una de las cosas más feas que he visto en mi vida. Simplemente declarar una constante en otro lugar sería menos doloroso. – abahgat

+4

esto no funciona, al menos, con una cadena entrando en una sentencia log4j. Crear un ejemplo con una nueva línea al final puede ocultar el problema. Además, la cadena s2 es sólo confuso usando '%% n' –

618

Puede utilizar

System.getProperty("line.separator"); 

para obtener el separador de línea

41

Si usted está tratando de escribir una nueva línea en un archivo, simplemente podría utilizar el método de BufferedWriter newLine().

11

uso del método de la clase newLine()BufferedWriter que proporciona la plataforma de manera independiente para escribir la nueva línea en el archivo

21

La biblioteca commons-lang tiene un campo constante disponible, llamado SystemUtils.LINE_SEPARATOR

+14

Sí, ¡instale una biblioteca de terceros solo para obtener una nueva línea independiente de la plataforma! #facepalm –

+18

@Shervin por supuesto que no harías eso, pero muchos proyectos en los que he trabajado ya están usando commons-lang y alguna versión anterior de Java. Entonces, si ya estás usando commons-lang, esta es una respuesta sensata. No me pareció necesario señalar eso, obviamente estaba equivocado. – lexicalscope

+2

Esto es de hecho una buena sugerencia para proyectos que ya están usando esta biblioteca, ¡gracias! –

589

Java 7 tiene ahora un método System.lineSeparator().

+5

Habría sido muy amable al proporcionar un método sobrecargado 'lineSeperator (int)' que devuelve una cierta cantidad de separadores de línea, ya que a menudo me encuentro usando 2 a la vez. – Kon

+7

@Kon Basado en [esta respuesta] (http://stackoverflow.com/a/24946101/594137): 'String.join (" ", Collections.nCopies (5, System.lineSeparator()))' –

0

Evita concatenar cadenas utilizando cuerdas + String etc, utilizar StringBuilder lugar.

String separator = System.getProperty("line.separator"); 
StringBuilder lines = new StringBuilder(line1); 
lines.append(separator); 
lines.append(line2); 
lines.append(separator); 
String result = lines.toString(); 
+15

Esto en realidad no importa en la mayoría de los casos, [Jeff Atwood, de Coding Horror, hizo una publicación en un blog sobre este tipo particular de micro-optimización] (http://www.codinghorror.com/blog/2009/01/the-sad-tragedy-of -micro-optimization-theater.html). Siempre haga métricas antes de hacer afirmaciones como "do not do' string + string' ". – Spoike

+5

Diría que el artículo de Jeff puede estar un poco apagado ya que solo toca el tiempo de ejecución. La concatenación de cadenas en Java no solo se trata de la velocidad de ejecución sino también de la cantidad de basura que deja en la memoria para que el GC la limpie, lo que puede hacer que el GC funcione con mayor frecuencia. Esto podría o no ser un problema dependiendo de su entorno y configuración. – Lajcik

+6

Lajcik, sospecho que es una optimización previa para todos los casos, excepto para aquellos que realmente hacen mucha manipulación de cadenas. StringBuffer es un anti-patrón para requisitos de concatenación menores. En muchos casos prefiero tener String1 + separator + String2 legible que el ejemplo multilínea mencionado anteriormente. Además, sugeriría probar si la memoria y el GC se ven impactados positivamente al agregar el SB. En muchos casos, supongo que no lo es. Si no vale la pena probarlo, probablemente sea una optimización previa y me centraré en la legibilidad. –

25

Esto también es posible: String.format("%n").

O String.format("%n").intern() para ahorrar algo de bytes.

+7

Esto es lo mismo que la respuesta de Alex B. – Spoike

+14

Oh, ahora lo veo. Escribió tantas cosas sin responder sobre su respuesta. ;-) – ceving

+0

He intentado hacer esto, pero cuando vi el archivo en el bloc de notas, no reconoció la nueva línea. – mr5

7
StringBuilder newLine=new StringBuilder(); 
newLine.append("abc"); 
newline.append(System.getProperty("line.separator")); 
newline.append("def"); 
String output=newline.toString(); 

El fragmento de arriba tendrá dos cadenas separadas por una nueva línea, independientemente de las plataformas.

Cuestiones relacionadas