System.lineSeparator()什么都不返回

Ger*_*ero 2 java newline linefeed

使用以下内容时应该看到什么?

System.out.println("LineSeperator1: "+System.getProperty("line.separator"));
System.out.println("LineSeperator2: "+System.lineSeparator());
Run Code Online (Sandbox Code Playgroud)

我得到以下回复:

LineSeperator1: 

LineSeperator2: 
Run Code Online (Sandbox Code Playgroud)

它是空的吗?无形?应该有类似的东西\r or \n吗?

我使用windows 7,eclipse和jdk 1.8.

Ald*_*den 7

如您所料,行分隔符包含特殊字符,例如'\r''\n'表示行的结尾.但是,尽管它们将使用那些反斜杠转义序列用Java源代码编写,但它们在打印时不会出现这种情况.行分隔符的目的是分隔行,例如,输出

System.out.println("Hello"+System.lineSeparator()+"World");
Run Code Online (Sandbox Code Playgroud)

Hello
World
Run Code Online (Sandbox Code Playgroud)

而不是说

Hello\nWorld
Run Code Online (Sandbox Code Playgroud)

您甚至可以在代码的输出中看到这一点:输出

System.out.println("LineSeperator1: "+System.getProperty("line.separator"));
Run Code Online (Sandbox Code Playgroud)

在下一个语句的输出之前有一个额外的空行,因为有一个行分隔符System.getProperty("line.separator")和另一个使用的行分隔符println.


如果你真的想看到什么行分隔符的转义版本的样子,你可以使用escapeJavaApache的百科全书.例如:

import org.apache.commons.lang3.StringEscapeUtils;

public class LineSeparators {
    public static void main(String[] args) {
        String ls1 = StringEscapeUtils.escapeJava(System.getProperty("line.separator"));
        System.out.println("LineSeperator1: "+ls1);
        String ls2 = StringEscapeUtils.escapeJava(System.lineSeparator());
        System.out.println("LineSeperator2: "+ls2);
    }
}
Run Code Online (Sandbox Code Playgroud)

在我的系统上,这输出

LineSeparator1: \n
LineSeparator2: \n
Run Code Online (Sandbox Code Playgroud)

请注意,我必须在与Apache下载的.jar文件相同的文件夹中运行它,编译并运行这些命令

javac -cp commons-lang3-3.4.jar LineSeparators.java
java -cp commons-lang3-3.4.jar:. LineSeparators
Run Code Online (Sandbox Code Playgroud)