对于几种语言,已经多次询问了此信息,但我无法使其正常工作。我有这样的字符串
String str = "This is a string.\nThis is a long string.";
而且我想,以取代\n
与<br />
使用
str = str.replaceAll("(\r\n|\n)", "<br />");
但\n
不会被替换。我尝试使用此RegEx工具进行验证,但看到的结果相同。输入的字符串不匹配"(\r\n|\n)"
。我究竟做错了什么 ?
对于几种语言,已经多次询问了此信息,但我无法使其正常工作。我有这样的字符串
String str = "This is a string.\nThis is a long string.";
而且我想,以取代\n
与<br />
使用
str = str.replaceAll("(\r\n|\n)", "<br />");
但\n
不会被替换。我尝试使用此RegEx工具进行验证,但看到的结果相同。输入的字符串不匹配"(\r\n|\n)"
。我究竟做错了什么 ?
replaceAll()
。
Answers:
您尝试使用的功能更强大的版本:
str = str.replaceAll("(\r\n|\n\r|\r|\n)", "<br />");
String
的replaceAll(...)
不正是在幕后。这是它的方法体:return Pattern.compile(expr).matcher(this).replaceAll(substitute)
:docjar.com/html/api/java/lang/String.java.html
由于我的帐户是新帐户,因此我无法对Nino van Hooff的答案进行投票。如果您的字符串来自基于Windows的源(例如基于aspx的服务器),则此解决方案可以工作:
rawText.replaceAll("(\\\\r\\\\n|\\\\n)", "<br />");
似乎是一个奇怪的字符集问题,因为双反斜杠被解释为单斜杠转义字符。因此,需要上面的四斜杠。
同样,在大多数情况下"(\\r\\n|\\n)"
应该可以,但是如果您的字符串来自基于Windows的源,请尝试以上操作。
仅供参考,我想尽一切办法纠正我替换那些行尾的问题。首先想到的是从失败的转换Windows-1252
到UTF-8
。但这也不起作用。该解决方案最终解决了问题。:)
那应该起作用,但是不要为了弄清楚而自杀。只需使用2个通行证即可。
str = str.replaceAll("(\r\n)", "<br />");
str = str.replaceAll("(\n)", "<br />");
免责声明:这不是很有效。
str = str.replace("\r\n", "<br />").replace("\n", "<br />");
replace(String,String)
String类中没有。我只能找到replace(Char, Char)
replace(CharSequence, CharSequence)
。请注意,这String
是一个 CharSequence
。
这应该工作。您需要输入两个斜杠
str = str.replaceAll("(\\r\\n|\\n)", "<br />");
在此参考中,有一个示例显示
private final String REGEX = "\\d"; // a single digit
我在许多项目中都使用了两个斜杠,看来效果很好!
\\d
里面一个字符串变成\d
同时\n
内部字符串文字仍然只是\n
(换行符),换句话说:你不能比较两个。
"(\\r\\n|\\n)"