我具有以下功能来替换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);


我收到此错误:
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'/>");


注意第二行的更改。

基本上,如果您不转义右括号,则解析器会感到困惑,因为它认为它错过了右括号。因此,您必须转义括号。另一方面,普通字母(在您的示例中为D)不需要转义,因为它们不构成正则表达式构造的一部分。

10-07 18:54