Java改变系统的新行字符

And*_*eas 5 java unix windows newline text-formatting

在Windows上,在Unix系统上使用System.out.println()打印输出.\n\r\n

有没有办法告诉java你想要使用哪些换行符?

Ale*_*exR 5

是的,有一种方法,我刚尝试过.

有一个系统属性line.separator.您可以使用它进行设置System.setProperty("line.separator", whatever)

为了确保它确实导致JVM使用其他分隔符,我实现了以下练习:

    PrintWriter writer = new PrintWriter(new FileWriter("c:/temp/mytest.txt"));
    writer.println("hello");
    writer.println("world");
    writer.close();
Run Code Online (Sandbox Code Playgroud)

我现在在Windows上运行,所以结果是14个字节长的文件:

03/27/2014  10:13 AM                14 mytest.txt
               1 File(s)             14 bytes
               0 Dir(s)  409,157,980,160 bytes free
Run Code Online (Sandbox Code Playgroud)

但是当我在代码的开头添加以下行时:

    System.setProperty("line.separator", "\n");
Run Code Online (Sandbox Code Playgroud)

我有14个字节长的文件:

03/27/2014 10:13 AM 14 mytest.txt 1个文件14个字节0个Dir(s)409,157,980,160个字节免费

我用记事本打开了这个文件,该记事本不能识别单行\n作为新行,helloworld而是看到一行文本而不是两行.所以,这很有效.

  • +1如果你快了几分钟我跳过写自己的答案......但是,值得注意的是一些JRE部分缓存了这个值,就像Java 7`java.lang.System.lineSeparator()`那样.要获得一致的行为,应在启动时指定该属性. (2认同)

Hol*_*ger 5

正如其他人已经指出的那样,系统属性line.separator包含实际的行分隔符。奇怪的是,其他答案没有得出简单的结论:您可以通过在启动时更改系统属性来覆盖该分隔符。

例如,如果您-Dline.separator=X在命令行中使用该选项运行程序,您将得到以。System.out.println(…);结尾的有趣行为X

最棘手的部分是如何像指定的字符\n或者\r在命令行中。但这是特定于系统/环境的,不再是Java问题。

  • 您可以按如下方式指定换行符-Dline.separator = $'\ n' (2认同)
  • @Andreas +1。$'\ n'用法位表示bash shell,并且还需要设置IFS ='',否则可以将换行符视为空白并丢弃。 (2认同)