替换字符串中的\ n

时间:2015-09-02 11:44:18

标签: java string replaceall

我的类似问题有几个答案,但我已尝试了其中几个并且它们无法正常工作。我必须做些蠢事。

我有

String newline = System.getProperty("line.separator");
String content = "Test\n another line\n";
if(content.contains("\\n")) {
    content = content.replaceAll("(\\n)", newline);
    System.out.print(content);
}

我还在正则表达式中尝试了“\ n”和“\\ n”。使用replaceAll保持内容不变。

3 个答案:

答案 0 :(得分:3)

好的事实:

  • \r是CR,U + 000D
  • \n是LF,U + 000A

您可以放入字符串中的那些字符

String s = "line 1.\nline 2.\n";
String newline = System.getProperty("line.separator");

newline可以是"\n"(1个字符)或"\r\n"(2个字符)或其他内容。

如果您要阅读此文本,请首先阅读反斜杠,然后阅读n,它将在代码中:

String nl = "\\n"; // Two chars, an escaped backslash and a `n`.
String nl = "\\" + 'n'; // Two chars, an escaped backslash and a `n`.

如果你想用真正的换行替换这两个字符:

s = s.replace("\\n", "\n");
s = s.replace("\\n", newline); // Platform dependent

现在java正则表达式仍然更加复杂,因为它使用反斜杠转义正则表达式字母,这在字符串中会自行转义:

这里你不需要正则表达式replaceAll / replaceFirst,但它会像:

s = s.replaceAll("\\\\n", "\n");

包含两个反斜杠的模式:正则表达式转义一个反斜杠。

答案 1 :(得分:0)

String newline = System.getProperty("line.separator");
String content = "Test\\n another line\\n";
if(content.contains("\\n")) {
    content = content.replaceAll("\\\\n", newline);
    System.out.print(content);
}

额外的2个斜杠是转义字符

答案 2 :(得分:0)

我也试过这个并且它有效

    content.replace("\\n", "\\r\\n") 

但是

    content.replaceAll("\\n", "\\r\\n")

没有。

所以最后我用了

    while(content.contains("\\n")) {
        content = content.replace("\\n", newline);
    }

这解决了我的问题,而不是优雅,但它确实有效。