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

Bal*_*a R 65 java regex replaceall

有几种语言曾多次询问过这种情况,但我无法使用它.我有这样的字符串

String str = "This is a string.\nThis is a long string.";
Run Code Online (Sandbox Code Playgroud)

而且我想,以取代\n<br />使用

str = str.replaceAll("(\r\n|\n)", "<br />");
Run Code Online (Sandbox Code Playgroud)

但是\n没有被取代.我尝试使用此RegEx工具进行验证,我看到相同的结果.输入字符串没有匹配项"(\r\n|\n)".我究竟做错了什么 ?

Mar*_*ers 114

这个对我有用.

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

结果:

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

你的问题出在其他地方.


Dol*_*lph 19

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

str = str.replaceAll("(\r\n|\n\r|\r|\n)", "<br />");
Run Code Online (Sandbox Code Playgroud)

  • 没有必要采用更冗长的方法.`String`的`replaceAll(...)`完全在幕后完成.这是它的方法体:`return Pattern.compile(expr).matcher(this).replaceAll(substitute)`:http://www.docjar.com/html/api/java/lang/String.java.html (4认同)

Nin*_*off 17

对我来说,这工作:

rawText.replaceAll("(\\\\r\\\\n|\\\\n)", "\\\n");
Run Code Online (Sandbox Code Playgroud)

提示:使用正则表达式测试程序进行快速测试,无需在您的环境中进行编译

  • 我不认为你有足够的反斜杠:) (11认同)

use*_*668 8

由于我的帐户是新的,我无法对Nino van Hooff的回答进行投票.如果您的字符串来自基于Windows的源,例如基于aspx的服务器,则此解决方案可以正常工作:

rawText.replaceAll("(\\\\r\\\\n|\\\\n)", "<br />");
Run Code Online (Sandbox Code Playgroud)

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

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

只是一个FYI尝试了一切来纠正我正在替换那些行结尾的问题.首先想到的是从失败的转换Windows-1252UTF-8.但那也没有奏效.这个解决方案终于成功了.:)