[英]Java replace smileys in string
我有以下功能来替换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)不需要转义,因为它们不构成正则表达式构造的一部分。
该代码段应该正常工作,除了如果第二个模式打算匹配一个笑脸而不是一个&
再跟一个:
,然后是一个非数字字符,则应该匹配。
smileys.put("&:D", "<img src='http://url.com/assets/2.png'/>");
对我来说很好
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;
}
}
输出-
<img src='http://url.com/assets/1.png'/>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.