73

这已被多次询问几种语言,但我无法让它工作。我有一个这样的字符串

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

我正在尝试\n<br />using替换

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

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

4

7 回答 7

122

这个对我有用。

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

结果:

这是一个字符串。<br />这是一个长字符串。

你的问题在别的地方。

于 2010-06-16T20:17:51.880 回答
19

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

str = str.replaceAll("(\r\n|\n\r|\r|\n)", "<br />");
于 2010-06-16T20:18:07.647 回答
19

对我来说,这有效:

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

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

于 2012-08-21T11:00:41.247 回答
10

由于我的帐户是新帐户,因此我无法对 Nino van Hooff 的回答进行投票。如果您的字符串来自基于 Windows 的源,例如基于 aspx 的服务器,则此解决方案确实有效:

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

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

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

仅供参考,我尝试了一切来纠正我替换这些行尾的问题。起初以为是从Windows-1252to转换失败UTF-8。但这也不起作用。这个解决方案最终成功了。:)

于 2014-07-02T17:29:55.803 回答
2

这个对我有用。Java 代码的工作方式与您编写的完全一样。在测试器中,输入字符串应该是:

This is a string.
This is a long string.

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

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

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

于 2010-06-16T20:40:59.360 回答
0

这应该可行,但不要为了弄清楚这一点而自杀。只需使用 2 次通行证。

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

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

于 2010-06-16T20:14:35.117 回答
-2

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

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

在本参考资料中,有一个示例显示

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

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

于 2010-06-16T20:15:45.550 回答