emoji-java 用来表情转换,你会用了吗?

: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 emojiTransformer = 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;

}

}

在这里插入图片描述

上面就是将不能转义的表情直接移除掉,也可以使用一个我们自定义的默认表情。

但是上面虽然是可行之法,却对用户不是很友好,用户输入的表情,再返回给用户的时候,竟然有些表情没有了。但是毕竟表情起到的修饰作用更多的,没有的话也情有可原。

方法二,既然前面说了,表情都是在emojis.json 中匹配的,那如果没有的话,我们在emojis.json 加上对应的关系,是不是就可以了呢?我们来试试。

我们用压缩包打开jar包

在这里插入图片描述

在这里插入图片描述

编辑emojis.json 比如我们🤭 这个表情没有,那我们自己添加一个。

{

“emojiChar”: “🤭”,

“emoji”: “\uD83E\uDD2D”,

“description”: “quellanan abc”,

“aliases”: [

“quellanan”

],

“tags”: []
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

分享

这次面试我也做了一些总结,确实还有很多要学的东西。相关面试题也做了整理,可以分享给大家,了解一下面试真题,想进大厂的或者想跳槽的小伙伴不妨好好利用时间来学习。学习的脚步一定不能停止!

薪酬缩水,“裸辞”奋战25天三面美团,交叉面却被吊打,我太难了

Spring Cloud实战

薪酬缩水,“裸辞”奋战25天三面美团,交叉面却被吊打,我太难了

Spring Boot实战

薪酬缩水,“裸辞”奋战25天三面美团,交叉面却被吊打,我太难了

面试题整理(性能优化+微服务+并发编程+开源框架+分布式)
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!
-SpM32Mcn-1711973814301)]

Spring Boot实战

[外链图片转存中…(img-gqIdVA3H-1711973814302)]

面试题整理(性能优化+微服务+并发编程+开源框架+分布式)
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!

  • 8
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值