过滤字符串中的emoji表情

网上搜索了很久,都没有一个很好的解决方案,经过多方查证和测试,有了自己的处理方案,写出来分享一下。

问题重点

  1. 微信聊天记录中,微信自带表情会变成[微笑] [握手]等格式,如何判断出字符串中该类表情以及如何去除
  2. 对于emoji表情,字符串中是一个小方块,如何筛选与判断

实现效果

 public static void main(String[] args) {String str = "[微笑]][[好\uD83D\uDC4C的[握拳]";System.out.println(removeEmoji(str));}


因为emoji是Unicode格式,java语言中是不可见的,所以粘贴出来就是一串Unicode码,而看上去会是一个方框,数据库中也一样。
mongodb中的样子:

复制后放入java中的样子和输出后的样子:

标准的emoji都可以通过下面引入的包进行操作,但微信自带的就不好处理了

依赖jar包 阿里云maven库 central

     <!--   java emoji表情库     --><dependency><groupId>com.vdurmont</groupId><artifactId>emoji-java</artifactId><version>5.1.1</version></dependency>

该包是github上一个开源的用于处理emoji表情的包。可以判断是否是emoji,字符串中是否存在emoji等很多实用方法,具体内容请看:com.vdurmont介绍

emoji介绍

emoji表情其实就是unicode码,Unicode(又称统一码、万国码、单一码)是计算机科学领域里的一项业界标准,包括字符集、编码方案等。Unicode是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。1990年开始研发,1994年正式公布。更多介绍详见度娘

实现代码

     /*** 判断消息是否是emoji表情** @param text:要判断的文本* @return: boolean* @author jo.li* @description isEmojiByText <br/>* @date 2020/12/21 13:34**/static boolean isEmojiByText(String text) {if (StringUtils.isBlank(text)) {return true;}if (StringUtils.isBlank(removeEmoji(text))) {return true;} else {return false;}}/*** 去除文本中的emoji表情,并返回剩余内容** @param text:原文本* @return: java.lang.String* @author jo.li* @description removeEmoji <br/>* @date 2020/12/24 13:26**/static String removeEmoji(String text) {if (StringUtils.isBlank(text)) {return text;}// 去除微信自带表情如[微笑] 如果不存在则返回原文text = removeWeChatEmoji(text);// 判断是否存在unicode格式的emoji表情if (EmojiManager.containsEmoji(text)) {// 去除字符串中的所有unicode格式的emoji表情return EmojiParser.removeAllEmojis(text);}return text;}/*** 递归删除微信文字表情 如[微笑]表情** @param str:文本* @return: java.lang.String* @author jo.li* @description removeWeChatEmoji <br/>* @date 2020/12/24 15:48**/static String removeWeChatEmoji(String str) {String emoji = recursionSplitStr(str);if (StringUtils.isNotBlank(emoji)) {// 表情在文本中的结尾位置int index = str.indexOf(emoji) + emoji.length();String beforeStr = str.substring(0, str.indexOf(emoji));if (index == str.length()) {return beforeStr;} else {str = removeWeChatEmoji(beforeStr + str.substring(index));}}return str;}/*** 获取文本中的微信表情 如[微笑]** @param text:* @return: java.lang.String* @author jo.li* @description recursionSplitStr <br/>* @date 2020/12/24 15:54**/static String recursionSplitStr(String text) {if (text.contains("[") && text.contains("]")) {if (text.substring(0, text.indexOf("]") + 1).length() == 1) {text = recursionSplitStr(text.substring(1));} else {text = text.substring(0, text.indexOf("]") + 1);}if (text.indexOf("[") != text.lastIndexOf("[")) {text = text.substring(text.indexOf("[") + 1);} else {text = text.substring(text.indexOf("["), text.indexOf("]") + 1);}if (text.lastIndexOf("[") != 0) {text = recursionSplitStr(text);}return text;}return "";}

注意事项

  1. 实现代码复用需仔细测试,可能存在bug。
  2. 由于微信表情部分的判断没有使用穷举法,所以文本中若存在"[xxx]"格式字符串,会被认为是微信表情,存在误剔除的可能,还请使用时注意

过滤文本或字符串中的emoji表情(包括微信自带表情处理)相关推荐

  1. python电话号码对应的字符组合_Python3 在字符串中提取字母+数字组合微信账号、电话等 - pytorch中文网...

    今天处理数据要提取字符串中的微信,字符串中包含中文英文Emoji,标点符号等. python 提取字符串中的电话 提取电话相对简单,多个电话也可以提取 import re desstr = " ...

  2. 怎么做表情包微信gif?表情包制作软件分享!​

    怎么做表情包微信gif?表情包是指一组或多组有意义的表情符号的集合,这些符号通常用于电子通信中的文字消息中,例如在社交媒体.聊天应用程序和电子邮件中.表情包可以包含各种各样的图像,从简单的笑脸到各种各 ...

  3. 记一次PHP+Mysql保存微信昵称带表情符失败案例

    记一次PHP+Mysql保存微信昵称带表情符失败案例 bug描述 做微信登陆时,出现部分用户不能等陆. 经过查看日志,发现是因为此部分用户使用了带表情的昵称. Statement could not ...

  4. python 清除字符串中的 emoji 表情

    https://pypi.org/project/emoji/ pip install emoji 字符串中间有 emoji 表情,替换掉. text = "

  5. 《Python CookBook2》 第一章 文本 - 检查字符串中是否包含某字符集合中的字符 简化字符串的translate方法的使用...

    检查字符串中是否包含某字符集合中的字符  任务: 检查字符串中是否出现了某个字符集合中的字符 解决方案: 方案一: import itertoolsdef containAny(seq,aset):f ...

  6. 正则匹配——python用一个正则表达式从字符串中提取数字(包括整数、小数、正负数)

    import re# 从字符串中提取数字 totalCount = '-100,abc2.4-123s,d-1ds-0.234as123.2s1.3bb.24' count = re.findall( ...

  7. android 过滤emoji表情符号,android怎样过滤字符串中的emoji表情

    满意答案 jdubysct 2016.03.15 采纳率:43%    等级:8 已帮助:863人 解决方案 对于字符串处理,首选就是正则表达式去处理,而在android系统中可以自定义InputFi ...

  8. 过滤字符串中的Emoji表情

    iOS 5.0之前,苹果都是采用3个字节来承接 emoji 表情,Java 的普通 char 可以支持显示.但 iOS 5.0 之后, 苹果升级了系统自带的 emoji 表情输入法,用的 Unicod ...

  9. 从富文本(html字符串)中获取图片,js获取富文本中的第一张图片(正则表达式)

    js获取富文本中的第一张图片url正则公式及去除字符串里面的html标签 后台发来一个富文本字符串里面可能包含了0.1.2.3-个图片标签(img),我们的任务是获取这个字符串里面第一张图片的url, ...

  10. 如何删除 字符串中的 emoji 表情符号

    在爬取数据时候遇到昵称中有 emoji  符号的在存储数据库的时候会遇到报错,这是因为 emoji 占用四个字符的大小,如果昵称很重要,必须保存完整昵称的,需要修改数据库的设置即可 如果保存完整的昵称 ...

最新文章

  1. import static
  2. XAF-Domain Components 技术 使用接口来定义ORM业务对象
  3. l293d电机驱动原理_一文搞懂步进电机特性、原理及驱动器设计
  4. GRE核心词汇助记与精练-List11弯、折、扭
  5. 中国移动、联通、电信、第三方平台IDC市场机房布局之争
  6. 官宣:神策 2018 数据驱动大会亮点回顾
  7. 研究 Dubbo 网卡地址注册时的一点思考
  8. thinkphp中表有前缀名的时候申明模板的方法
  9. 微机计算机原理姚向华课后答案,微型计算机操作系统
  10. Angularjs中设置cookies的过期时间
  11. hi3519多sensor设置说明
  12. java 场景面试题_Java面试场景整理收录
  13. 10套精美而实用的CSS3按钮
  14. python猜词游戏演讲ppt_Python 猜词游戏–多步骤猜词+评分系统
  15. 浏览器主页被劫持篡改了怎么办
  16. 用html js制作迷宫,JavaScript生成随机迷宫详解
  17. 从键盘上输入一个数,判断是否为素数。
  18. 七、使用OpenCV徒手实现:RGB转HSI,并提取红色
  19. 小程序CMS(开通预览)
  20. 条码打印软件如何使用Excel表批量打印条码标签

热门文章

  1. hd Aruba wifi / honor
  2. java截取视频的帧
  3. 也可以说不漂亮的飞鸽传书
  4. tc简单开发。窗口类。在窗口初始化时,使用窗口隐藏()
  5. 无尽的拉格朗日多开器
  6. puk码怎么查询_手机PUK码怎么查询?使用PUK码解锁手机电话SIM/USIM卡的教程
  7. SpringBoot(30) 整合PageOffice实现在线编辑Word和Excel
  8. 配置DTcms伪静态功能图文教程
  9. 普通有刷直流电机 H桥驱动
  10. 解读国密非对称加密算法SM2