Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java替换字符串中的smiley_Java - Fatal编程技术网

Java替换字符串中的smiley

Java替换字符串中的smiley,java,Java,我有以下函数来替换字符串中的smiley: public String replaceSmileys(String text) { for (Entry < String, String > smiley: smileys.entrySet()) text = text.replaceAll(smiley.getKey(), smiley.getValue()); return text; } static HashMap < String,

我有以下函数来替换
字符串中的smiley

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);
公共字符串替换smileys(字符串文本){
对于(条目smiley:smileys.entrySet())
text=text.replaceAll(smiley.getKey(),smiley.getValue());
返回文本;
}
静态HashMapsmileys=newhashmap();
smileys.put(&:\\),“”);
smileys.put(&:\\D,“”);
smileys.put(&;\\),“”);
字符串sml=replaceSmileys(msg);
我收到这个错误:
java.util.regex.PatternSyntaxException:索引4附近的未知字符属性名称{}
&:\P


你知道我做错了什么吗?

代码段应该工作得很好,除非第二种模式要匹配一个笑脸,而不是一个
&
,后跟一个
,然后是一个非数字字符,那么它应该是

    smileys.put("&:D", "<img src='http://url.com/assets/2.png'/>");
smileys.put(&:D,“”);

只需转义括号,不需要转义文字字符。因此:

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'/>");
smileys.put(&:\\),“”);
smileys.put(&:D,“”);
smileys.put(&;\\),“”);
注意第二行的变化


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

对我来说,这很好

public class Test {
    public static void main(String[] args) {
        String sml = replaceSmileys("&:)");
        System.out.println(sml);
    }

    static String replaceSmileys(String text) {
        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'/>");
        for (Entry < String, String > smiley: smileys.entrySet())
            text = text.replaceAll(smiley.getKey(), smiley.getValue());
        return text;
    }
}
公共类测试{
公共静态void main(字符串[]args){
字符串sml=replaceSmileys(&:)”;
系统输出打印LN(sml);
}
静态字符串替换smileys(字符串文本){
HashMapsmileys=newhashmap();
smileys.put(&:\\),“”);
smileys.put(&:D,“”);
smileys.put(&;\\),“”);
对于(条目smiley:smileys.entrySet())
text=text.replaceAll(smiley.getKey(),smiley.getValue());
返回文本;
}
}
输出-

<img src='http://url.com/assets/1.png'/>


添加了现在我得到的错误:
java.util.regex.PatternSyntaxException:Unmatched closing'),靠近索引3&;\\)D
不需要转义-您只需要
&:D
,而不需要
&:\\D
。与
&:\\P
(我假设您没有在此处发布的某些代码中有此代码)相同。新错误:)
java.util.regex.PatternSyntaxException:Unmatched closing'),靠近索引1&;)