如何获得与平台相关的新行字符?

Spo*_*ike 531 java cross-platform newline eol

如何在Java中获得与平台相关的换行符?我不能"\n"到处使用.

Str*_*ior 690

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

  • @Kon基于[这个答案](http://stackoverflow.com/a/24946101/594137):`String.join("",Collections.nCopies(5,System.lineSeparator()))` (10认同)
  • 本来非常好的提供一个重载方法`lineSeperator(int)`,它返回一些行分隔符,因为我经常发现自己一次使用2. (8认同)
  • 使用Java 11:`System.lineSeparator().repeat(5)` (4认同)
  • @JacobG停止高兴..我们中有些人仍然停留在Java 7上。 (4认同)

aba*_*gat 645

您可以使用

System.getProperty("line.separator");
Run Code Online (Sandbox Code Playgroud)

得到行分隔符

  • 注意添加Java 7`System.lineSeparator()`的详细信息,所以这里是这个问题的明确答案? (3认同)

Ale*_*x B 361

除了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   ^^
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请参阅Java 1.8 API for Formatter.

  • 哦,我的,"Line 1"+ System.getProperty("line.separator")+"Line 2"确实是我见过的最丑陋的东西之一.只是在别处宣布一个常数就不那么痛苦了. (43认同)
  • @KonstantinWeitz,`String.format(s +"%n")`的问题很容易被`String.format("%s%n",s)`解决.将用户输入作为格式体(与`eval()`相同)总是有风险的. (8认同)
  • 谢谢!我确定System.getProperty("line.separator"); 有它的用途,但我厌倦了看到:"第1行"+ System.getProperty("line.separator")+"第2行" (7认同)
  • 如果你的字符串可能包含来自用户输入的`%`,请不要使用它! (6认同)
  • 这至少在字符串进入log4j语句时不起作用.在最后创建一个带换行符的示例可能会隐藏问题.而且,String s2只是使用'%% n'而混淆 (4认同)

Mic*_*ers 43

如果您尝试在文件中写入换行符,则只需使用BufferedWriter的newLine()方法即可.


cev*_*ing 30

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

或者String.format("%n").intern()保存一些字节.

  • 哦,现在我明白了.他在答案中写了这么多未提及的东西.;-) (15认同)
  • 这与Alex B的答案相同. (7认同)

lex*_*ope 22

公地郎库有一个可用的恒定场称为SystemUtils.LINE_SEPARATOR

  • @Shervin当然你不会这样做,但我曾经使用过的许多项目已经在使用commons-lang和一些旧版Java.所以如果你恰好使用了公共语言,那么这是一个明智的答案.我觉得没有必要指出这一点,我显然是错的. (23认同)
  • 是的,安装第三方库只是为了获得平台独立的新行!#facepalm (18认同)
  • 对于已经使用此库的项目,这确实是一个很好的建议,谢谢! (2认同)

小智 13

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


Sat*_*har 11

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

无论平台如何,上面的代码片段都有两个由新行分隔的字符串.