我有以下功能来取代表情符号String:
public String replaceSmileys(String text) {
for (Entry < String, String > smiley: smileys.entrySet())
text = text.replaceAll(smiley.getKey(), smiley.getValue());
return text;
}
static HashMap < String, String > smileys = new HashMap < String, String > ();
smileys.put("&:\\)", "<img src='http://url.com/assets/1.png'/>");
smileys.put("&:\\D", "<img src='http://url.com/assets/2.png'/>");
smileys.put("&;\\)", "<img src='http://url.com/assets/3.png'/>");
String sml = replaceSmileys(msg);
Run Code Online (Sandbox Code Playgroud)
我得到这个错误:
java.util.regex.PatternSyntaxException: Unknown character property name {} near index 4
&:\P
什么想法我做错了什么?
只需要转义括号,而不是文字字符.所以:
smileys.put("&:\\)", "<img src='http://url.com/assets/1.png'/>");
smileys.put("&:D", "<img src='http://url.com/assets/2.png'/>");
smileys.put("&;\\)", "<img src='http://url.com/assets/3.png'/>");
Run Code Online (Sandbox Code Playgroud)
注意第二行的变化.
基本上,如果你没有逃避闭括号,解析器就会混淆,因为它认为它错过了一个开括号.所以你必须逃避括号.另一方面,普通旧字母(在您的示例中为D)不需要转义,因为它们不构成正则表达式构造的一部分.
| 归档时间: |
|
| 查看次数: |
1059 次 |
| 最近记录: |