我的类似问题有几个答案,但我已尝试了其中几个并且它们无法正常工作。我必须做些蠢事。
我有
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保持内容不变。
答案 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);
}
这解决了我的问题,而不是优雅,但它确实有效。