用java中的<br />replace\ n和\ r \ n

这已经被几次提出了几种语言,但我不能得到它的工作。 我有这样的一个string

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

我试图用<br />replace\n

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

\n并没有被取代。 我试图使用这个RegEx工具来validation,我看到了相同的结果。 inputstring没有匹配"(\r\n|\n)" 。 我究竟做错了什么 ?

这个对我有用。

 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); } } 

结果:

这是一个string。<br />这是一个很长的string。

你的问题在别的地方。

一个更强大的版本,你正在尝试:

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

对我来说,这工作:

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

提示:使用正则expression式testing器进行快速testing,无需在您的环境中编译

由于我的帐户是新的,所以我不能对Nino van Hooff的答案进行投票。 如果您的string来自基于Windows的源(如基于aspx的服务器),则此解决scheme可以正常工作:

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

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

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

只是一个“供参考”,想尽一切办法来纠正我正在取代那些行结尾的问题。 起初思考是从Windows-1252转换到UTF-8失败。 但是这也不起作用。 这个解决scheme是最后的诀窍。 🙂

这个对我有用。 Java代码就像你写的一样。 在testing仪中,inputstring应该是:

 This is a string. This is a long string. 

用真正的换行 你不能使用:

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

…因为它将\n视为字面序列反斜杠'n'

这应该是有效的,但不要自杀,试图弄清楚。 只要使用2遍。

 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 

我在我的许多项目中使用了两个斜杠,似乎工作正常!