过滤文本或字符串中的emoji表情(包括微信自带表情处理)
过滤字符串中的emoji表情
网上搜索了很久,都没有一个很好的解决方案,经过多方查证和测试,有了自己的处理方案,写出来分享一下。
问题重点
- 微信聊天记录中,微信自带表情会变成[微笑] [握手]等格式,如何判断出字符串中该类表情以及如何去除
- 对于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 "";}
注意事项
- 实现代码复用需仔细测试,可能存在bug。
- 由于微信表情部分的判断没有使用穷举法,所以文本中若存在"[xxx]"格式字符串,会被认为是微信表情,存在误剔除的可能,还请使用时注意!
过滤文本或字符串中的emoji表情(包括微信自带表情处理)相关推荐
- python电话号码对应的字符组合_Python3 在字符串中提取字母+数字组合微信账号、电话等 - pytorch中文网...
今天处理数据要提取字符串中的微信,字符串中包含中文英文Emoji,标点符号等. python 提取字符串中的电话 提取电话相对简单,多个电话也可以提取 import re desstr = " ...
- 怎么做表情包微信gif?表情包制作软件分享!
怎么做表情包微信gif?表情包是指一组或多组有意义的表情符号的集合,这些符号通常用于电子通信中的文字消息中,例如在社交媒体.聊天应用程序和电子邮件中.表情包可以包含各种各样的图像,从简单的笑脸到各种各 ...
- 记一次PHP+Mysql保存微信昵称带表情符失败案例
记一次PHP+Mysql保存微信昵称带表情符失败案例 bug描述 做微信登陆时,出现部分用户不能等陆. 经过查看日志,发现是因为此部分用户使用了带表情的昵称. Statement could not ...
- python 清除字符串中的 emoji 表情
https://pypi.org/project/emoji/ pip install emoji 字符串中间有 emoji 表情,替换掉. text = "
- 《Python CookBook2》 第一章 文本 - 检查字符串中是否包含某字符集合中的字符 简化字符串的translate方法的使用...
检查字符串中是否包含某字符集合中的字符 任务: 检查字符串中是否出现了某个字符集合中的字符 解决方案: 方案一: import itertoolsdef containAny(seq,aset):f ...
- 正则匹配——python用一个正则表达式从字符串中提取数字(包括整数、小数、正负数)
import re# 从字符串中提取数字 totalCount = '-100,abc2.4-123s,d-1ds-0.234as123.2s1.3bb.24' count = re.findall( ...
- android 过滤emoji表情符号,android怎样过滤字符串中的emoji表情
满意答案 jdubysct 2016.03.15 采纳率:43% 等级:8 已帮助:863人 解决方案 对于字符串处理,首选就是正则表达式去处理,而在android系统中可以自定义InputFi ...
- 过滤字符串中的Emoji表情
iOS 5.0之前,苹果都是采用3个字节来承接 emoji 表情,Java 的普通 char 可以支持显示.但 iOS 5.0 之后, 苹果升级了系统自带的 emoji 表情输入法,用的 Unicod ...
- 从富文本(html字符串)中获取图片,js获取富文本中的第一张图片(正则表达式)
js获取富文本中的第一张图片url正则公式及去除字符串里面的html标签 后台发来一个富文本字符串里面可能包含了0.1.2.3-个图片标签(img),我们的任务是获取这个字符串里面第一张图片的url, ...
- 如何删除 字符串中的 emoji 表情符号
在爬取数据时候遇到昵称中有 emoji 符号的在存储数据库的时候会遇到报错,这是因为 emoji 占用四个字符的大小,如果昵称很重要,必须保存完整昵称的,需要修改数据库的设置即可 如果保存完整的昵称 ...
最新文章
- import static
- XAF-Domain Components 技术 使用接口来定义ORM业务对象
- l293d电机驱动原理_一文搞懂步进电机特性、原理及驱动器设计
- GRE核心词汇助记与精练-List11弯、折、扭
- 中国移动、联通、电信、第三方平台IDC市场机房布局之争
- 官宣:神策 2018 数据驱动大会亮点回顾
- 研究 Dubbo 网卡地址注册时的一点思考
- thinkphp中表有前缀名的时候申明模板的方法
- 微机计算机原理姚向华课后答案,微型计算机操作系统
- Angularjs中设置cookies的过期时间
- hi3519多sensor设置说明
- java 场景面试题_Java面试场景整理收录
- 10套精美而实用的CSS3按钮
- python猜词游戏演讲ppt_Python 猜词游戏–多步骤猜词+评分系统
- 浏览器主页被劫持篡改了怎么办
- 用html js制作迷宫,JavaScript生成随机迷宫详解
- 从键盘上输入一个数,判断是否为素数。
- 七、使用OpenCV徒手实现:RGB转HSI,并提取红色
- 小程序CMS(开通预览)
- 条码打印软件如何使用Excel表批量打印条码标签