在java中用\替换\ n和\ r \ n

时间:2010-06-16 20:12:24

标签: java regex replaceall

对于多种语言,已经多次询问过这种情况,但我无法使用它。 我有一个像这样的字符串

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

我正在尝试使用

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

\n未被替换。 我尝试使用此RegEx Tool进行验证,我看到了相同的结果。输入字符串与"(\r\n|\n)"不匹配。我做错了什么?

7 个答案:

答案 0 :(得分:112)

它对我有用。

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.

你的问题出在其他地方。

答案 1 :(得分:19)

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

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

答案 2 :(得分:17)

对我来说,这很有效:

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

提示:使用regex tester进行快速测试,而无需在您的环境中进行编译

答案 3 :(得分:8)

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

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

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

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

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

答案 4 :(得分:2)

它对我有用。 Java代码与您编写的完全一样。在测试器中,输入字符串应为:

This is a string.
This is a long string.

...带有真正的换行符。你不能使用:

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

...因为它将\n视为文字序列反斜杠'n'

答案 5 :(得分:0)

这应该有效,但不要试图弄明白自己。只需使用2次。

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

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

答案 6 :(得分:-2)

这应该有效。你需要输入两个斜杠

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

在此Reference中,有一个显示

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

我在我的很多项目中都使用过两个斜杠,看起来效果很好!