我如何获得一个平台相关的新行字符?

如何在Java中获得一个依赖于平台的换行符?我不能到处使用"\n"

449380 次浏览

你可以使用

System.getProperty("line.separator");

得到行分隔符

除了行。分隔符属性,如果你使用java 1.5或更高版本和String.format(或其他格式化方法),你可以使用%n,如在

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   ^^

更多细节请参见Formatter的Java 1.8 API

如果您试图向文件写入换行符,您可以简单地使用BufferedWriter的换行符()方法。

如果使用BufferedWriter实例写入文件,则使用该实例的newLine()方法。它提供了一种独立于平台的方式来在文件中写入新行。

commons lang库有一个常量字段,名为SystemUtils。LINE_SEPARATOR

Java 7现在有一个System.lineSeparator()方法。

避免使用String + String等附加字符串,使用StringBuilder代替。

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

这也是可能的:String.format("%n")

或者String.format("%n").intern()来节省一些字节。

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

上面的代码段将有两个字符串,由新行分隔,与平台无关。

从JDK 1.1开始,BufferedWriter类有&;newLine()&;方法,该方法编写了依赖于平台的新行。它还提供了StringWriter类,使得提取新行成为可能:

public static String getSystemNewLine() {
try {
StringWriter sw = new StringWriter();
BufferedWriter bw = new BufferedWriter(sw);
bw.newLine();
bw.flush();
String s = sw.toString();
bw.close();
return s;
} catch (Exception e) {
throw new Error(e);
}
}