在 java 中用 < br/> 替换 n 和 rn

好几种语言都有这个问题,但是我不能让它起作用。 我有一根这样的线

String str = "This is a string.\nThis is a long string.";

我试图用 <br />代替 \n

str = str.replaceAll("(\r\n|\n)", "<br />");

但是 \n没有被取代。 我尝试使用这个 正则表达工具来验证,我看到了相同的结果。输入字符串与 "(\r\n|\n)"不匹配。我做错了什么?

160042 次浏览

这样应该可以,但是不要为了弄清楚这个问题而自杀,只需要两次传球。

str  = str.replaceAll("(\r\n)", "<br />");
str  = str.replaceAll("(\n)", "<br />");

免责声明: 这不是很有效。

这个应该可以,你需要加两个斜线

str = str.replaceAll("(\\r\\n|\\n)", "<br />");

在这个 参考文献中,有一个示例显示

private final String REGEX = "\\d"; // a single digit

我在许多项目中使用了两个斜杠,它似乎工作得很好!

对我有用。

public class Program
{
public static void main(String[] args) {
String str = "This is a string.\nThis is a long string.";
str = str.replaceAll("(\r\n|\n)", "<br />");
System.out.println(str);
}
}

结果:

This is a string.<br />This is a long string.

你的问题在别的地方。

一个更加健壮的版本:

str = str.replaceAll("(\r\n|\n\r|\r|\n)", "<br />");

对我有用。Java 代码完全按照您编写的方式工作。在测试程序中,输入字符串应该是:

This is a string.
This is a long string.

你不能用:

This is a string.\nThis is a long string.

因为它把 \n当作字面序列 反斜杠 n’

对我来说,这个方法奏效了:

rawText.replaceAll("(\\\\r\\\\n|\\\\n)", "\\\n");

提示: 使用 正则表达式测试仪进行快速测试,而不需要在您的环境中进行编译

因为我的账户是新的,我不能给尼诺 · 范 · 胡夫的答案投赞成票。如果您的字符串来自基于 Windows 的源代码,比如基于 aspx 的服务器,那么这个解决方案确实可行:

rawText.replaceAll("(\\\\r\\\\n|\\\\n)", "<br />");

这似乎是一个奇怪的字符集问题,因为双斜杠被解释为单斜杠转义字符。因此需要上面的四重斜线。

同样,在大多数情况下 "(\\r\\n|\\n)"应该可以工作,但是如果您的字符串来自基于 Windows 的源代码,请尝试以上方法。

仅供参考,我想尽一切办法来纠正我更换那些行结尾的问题。起初以为是从 Windows-1252UTF-8的转换失败。但那也没用。这个解决方案最终奏效了。:)