【问题标题】:Replacing newline character in UNIX替换 UNIX 中的换行符
【发布时间】:2012-07-12 05:32:48
【问题描述】:

我正在编写代码来替换字符串中的换行符。在 Windows 上,当我使用时

String.replaceAll(System.getProperty("line.separator"), "\\n");

这工作正常,但在 UNIX 中失败。

我应该在 UNIX 中使用什么?

【问题讨论】:

  • @Tichodroma 的编辑破坏了代码。现在它显示 \\n 而不是 \n

标签: java windows unix newline


【解决方案1】:

\n 对于 Unix 是正确的。 Windows 使用\r\n,Mac 使用\r IIRC。

问题可能在于Java 作为一种多平台语言,会自动将\n 替换为系统的分隔符。我不了解 Java,但我认为是这种情况。

编辑:如果您发布的代码是您正在使用的,我想我看到了问题。 String 是一个类。它在 Java 中也是不可变的。应该是这样的:

String myStr = "abc\ndef";
myStr = myStr.replaceAll(/* params */);

【讨论】:

  • 在我的情况下,我从某个地方收到一个文本,我必须将它设置为一个字符串。并且当在字符串中按下 ENTER 键时,它有 2 行,所以想用 \n 替换它,以便在执行新字符串时正确显示。当我在windows中使用时,java代码做了它应该做的事情,但在unix中却没有。所以我应该使用 String.replaceAll("\n", "\\n"); ??
【解决方案2】:

接收到的文本可能包含 windows 行分隔符,因此仅替换 \n 字符无效。

如果您不知道文本的来源(或文本包含混合行分隔符),以下方法可以提供帮助。先将windows和mac的行分隔符转换为unix分隔符,再将unix分隔符转换为系统分隔符。

final String DOS = "\r\n", NIX = "\n", MAC = "\r";
String converted = original.replace(DOS, NIX)
                           .replace(MAC, NIX)
                           .replace(NIX, System.lineSeparator());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-24
    • 2012-11-19
    • 1970-01-01
    • 2018-09-14
    • 1970-01-01
    • 2011-05-18
    • 2021-08-10
    • 2010-10-31
    相关资源
    最近更新 更多