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&;)对不起,那不清楚。请看我的答案。@Mac\D有效。只是它将匹配任何非数字字符。我已经编辑了代码。。我忘了在函数调用中添加(&i)