打印的结果如下:
:hugging:😏😶😐:eye_roll:
🤗😏😶😐🙄
可以看到,EmojiParser.parseToAliases(str)是将包含字符串的str进行转义。
EmojiParser.parseToUnicode(str);是将转义后的str 进行还原成表情。有点像对数据进行加密解密的味道。
===================================================================
使用起来不难,但既然是github 上开源的项目,我们也来稍微的深入了解下。可以看到整个jar包还是很简单的,就几个类而已。我们用到的EmojiParser 类,所以我们就来看看这类方法。
这个类的最上面的一个方法就我们用的最多的将包含有表情的字符串进行转义。可以看到这里用了多态性质,还有一个同命不同参的方法。其实就是给第二个参数赋予了一个默认值。
可以看到有三种模式。
public static String parseToAliases(String input, final EmojiParser.FitzpatrickAction fitzpatrickAction) {
EmojiParser.EmojiTransformer emoji 需要zi料+ 绿色徽【vip1024b】
Transformer = new EmojiParser.EmojiTransformer() {
public String transform(EmojiParser.UnicodeCandidate unicodeCandidate) {
switch(fitzpatrickAction) {
case PARSE:
default:
if (unicodeCandidate.hasFitzpatrick()) {
return “:” + (String)unicodeCandidate.getEmoji().getAliases().get(0) + “|” + unicodeCandidate.getFitzpatrickType() + “:”;
}
case REMOVE:
return “:” + (String)unicodeCandidate.getEmoji().getAliases().get(0) + “:”;
case IGNORE:
return “:” + (String)unicodeCandidate.getEmoji().getAliases().get(0) + “:” + unicodeCandidate.getFitzpatrickUnicode();
}
}
};
return parseFromUnicode(input, emojiTransformer);
}
默认情况下,别名将解析并包括将提供的任何Fitzpatrick修饰符。 如果要删除或忽略Fitzpatrick修饰符。
parseFromUnicode(input, emojiTransformer) 方法就是将表情转换成对应的字符串了。至于怎么转换的,是将字符串拆成一个个的字符,然后在emojis.json 中匹配,如果emojis.json 有这个表情,就会转义成对应的别名。
=================================================================
所以我们不能保证所有的表情在emojis.json 中都存在,也就是说,这个转换的jar 包只能支持部分表情。比如这个表情就没有。
🤭
String str=“\uD83E\uDD2D”;
所以如果我们输入了一些无法转换的表情,入库的时候还是会报错。那没有的表情怎么处理呢?
这里提供两种思路。
一:将不能转换的表情舍弃掉,虽然这个表情在json中没有,但是它依旧是一个四字节的字符。所以我们可以写一个通用方法过滤掉。没能转换的表情依然是下面\ud 开头的,所以用replaceAll 直接替换掉。slipStr是将我们不能转换的表情替换成我们自定义的字符。
public static String filterEmoji(String source,String slipStr) {
if(StringUtils.isNotBlank(source)){
return source.replaceAll(“[\ud800\udc00-\udbff\udfff\ud800-\udfff]”, slipStr);
}else{
return source;
}
}
最后
Java架构进阶面试及知识点文档笔记
这份文档共498页,其中包括Java集合,并发编程,JVM,Dubbo,Redis,Spring全家桶,MySQL,Kafka等面试解析及知识点整理
Java分布式高级面试问题解析文档
其中都是包括分布式的面试问题解析,内容有分布式消息队列,Redis缓存,分库分表,微服务架构,分布式高可用,读写分离等等!
互联网Java程序员面试必备问题解析及文档学习笔记
Java架构进阶视频解析合集
列,Redis缓存,分库分表,微服务架构,分布式高可用,读写分离等等!
[外链图片转存中…(img-JdSoFGIq-1710347743338)]
互联网Java程序员面试必备问题解析及文档学习笔记
[外链图片转存中…(img-QvKscHDv-1710347743338)]
Java架构进阶视频解析合集