好几种语言都有这个问题,但是我不能让它起作用。 我有一根这样的线
String str = "This is a string.\nThis is a long string.";
我试图用 <br />代替 \n
<br />
\n
str = str.replaceAll("(\r\n|\n)", "<br />");
但是 \n没有被取代。 我尝试使用这个 正则表达工具来验证,我看到了相同的结果。输入字符串与 "(\r\n|\n)"不匹配。我做错了什么?
"(\r\n|\n)"
这样应该可以,但是不要为了弄清楚这个问题而自杀,只需要两次传球。
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 的源代码,请尝试以上方法。
"(\\r\\n|\\n)"
仅供参考,我想尽一切办法来纠正我更换那些行结尾的问题。起初以为是从 Windows-1252到 UTF-8的转换失败。但那也没用。这个解决方案最终奏效了。:)
Windows-1252
UTF-8