过滤文本或字符串中的emoji表情(包括微信自带表情处理) 您所在的位置:网站首页 微信表情变文字了怎么办 过滤文本或字符串中的emoji表情(包括微信自带表情处理)

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

2024-06-01 19:35| 来源: 网络整理| 查看: 265

过滤字符串中的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 com.vdurmont emoji-java 5.1.1

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

emoji介绍

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

实现代码 /** * 判断消息是否是emoji表情 * * @param text:要判断的文本 * @return: boolean * @author jo.li * @description isEmojiByText * @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 * @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 * @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 * @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]"格式字符串,会被认为是微信表情,存在误剔除的可能,还请使用时注意!


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有