与我类似的问题有几个答案,但我已经尝试了其中的几个,但它们都不起作用。我一定是在做傻事。
我有
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 内容保持不变。
最佳答案
好的事实:
\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 regex 仍然更复杂,因为它使用反斜杠转义 regex 字母,而在 Strings 中反斜杠本身被转义:
你在这里不需要正则表达式 replaceAll/replaceFirst,但它会是:
s = s.replaceAll("\\\\n", "\n");
包含两个反斜杠的模式:正则表达式转义一个反斜杠。
关于java - 替换字符串中的\n,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32352256/