写API接口处理特殊表情自己记录一下方便下次使用
1.引入依赖
<!--表情包--> <!-- https://mvnrepository.com/artifact/com.vdurmont/emoji-java --> <dependency> <groupId>com.vdurmont</groupId> <artifactId>emoji-java</artifactId> <version>5.1.1</version> </dependency>
2.写一个工具类(如果有朋友看我的文章 请跳过第2步 只是自己的记录 直接看第3步使用方式就ok)
package com.weixiu.zxt.utils; import java.util.List; import com.vdurmont.emoji.EmojiParser; /** * @Author: 张学涛 * @Date: 2019-09-30 14:23 * @Version 1.0 */ public class EmojiDealUtil extends EmojiParser { /** * 获取非表情字符串 * @param input * @return */ public static String getNonEmojiString(String input) { int prev = 0; StringBuilder sb = new StringBuilder(); List<UnicodeCandidate> replacements = getUnicodeCandidates(input); for (UnicodeCandidate candidate : replacements) { sb.append(input.substring(prev, candidate.getEmojiStartIndex())); prev = candidate.getFitzpatrickEndIndex(); } return sb.append(input.substring(prev)).toString(); } /** * 获取表情字符串 * @param input * @return */ public static String getEmojiUnicodeString(String input){ EmojiTransformer transformer = new EmojiTransformer() { @Override public String transform(UnicodeCandidate unicodeCandidate) { return unicodeCandidate.getEmoji().getHtmlHexadecimal(); } }; StringBuilder sb = new StringBuilder(); List<UnicodeCandidate> replacements = getUnicodeCandidates(input); for (UnicodeCandidate candidate : replacements) { sb.append(transformer.transform(candidate)); } return parseToUnicode(sb.toString()); } public static String getUnicode(String source){ String returnUniCode=null; String uniCodeTemp=null; for(int i=0;i<source.length();i++){ uniCodeTemp = "\\u"+Integer.toHexString((int)source.charAt(i)); returnUniCode=returnUniCode==null?uniCodeTemp:returnUniCode+uniCodeTemp; } return returnUniCode; } }
使用方式
// String receiverAddress = receive.getReceiverAddress(); // logger.info("表情:"+EmojiDealUtil.getEmojiUnicodeString(receiverAddress)); // logger.info("非表情:"+EmojiDealUtil.getNonEmojiString(receiverAddress)); // String s = EmojiParser.parseToHtmlDecimal(receiverAddress); // logger.info("解析表情字符串"+s); // logger.info("还原表情字符串"+EmojiParser.parseToUnicode(s)); //转换表情 // if(StringUtils.isNotBlank(EmojiDealUtil.getEmojiUnicodeString(receiverAddress))){ // String hexadecimal = EmojiParser.parseToHtmlHexadecimal(“将被检测内容中的表情符号替换为表情符号的html的十六进制和数据,类似于😉”); // taskPaidInteractVo.setInteractContent(hexadecimal); // } // 反解析,将存入数据库的😉转换为表情对应的4字节Unicode编码,这样移动端才能识别 //转换表情 // String interactContent = EmojiParser.parseToUnicode("被转换内容,会将html的十六进制和数据转换为表情对应的4字节Unicode编码"); // interactVo.setInteractContent(interactContent );
package com.weixiu.zxt.utils; /** * 表情处理工具 * @Author: 张学涛 * @Date: 2019-09-30 14:24 * @Version 1.0 */ import org.apache.commons.lang3.StringUtils; public class FilterEmojiUtil { /** * emoji表情替换 * * @param source 原字符串 * @param slipStr emoji表情替换成的字符串 * @return 过滤后的字符串 */ 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; } } /** * 判断是否包含emoji表情 * * @param source 原字符串 * @paramslipStr emoji表情替换成的字符串 * @return 过滤后的字符串 */ public static boolean checkEmoji(String source) { if(StringUtils.isNotBlank(source)){ return source.matches("[\\ud800\\udc00-\\udbff\\udfff\\ud800-\\udfff]"); }else{ return false; } } }
3.使用
//根据ID新增收货地址 int insertUserAddress = addressManageService.insertUserAddress(receive.getUserId(), EmojiParser.parseToHtmlDecimal(receive.getReceiverName()), receive.getReceiverPhone(), receive.getReceiverProvince(), receive.getReceiverCity(), receive.getReceiverArea(), receive.getReceiverTown(),EmojiParser.parseToHtmlDecimal(receive.getReceiverAddress()) , receive.getDefaultAddress(), new Date());
//根据ID查询收货地址列表 logger.info("开始查询收货地址 用户=" + receive.getUserId()); List<UserAddress> list = addressManageService.getAddressList(receive.getUserId()); for (int i = 0; i < list.size(); i++) { UserAddress userAddress = list.get(i); userAddress.setReceiverName(EmojiParser.parseToUnicode(userAddress.getReceiverName())); userAddress.setReceiverAddress(EmojiParser.parseToUnicode(userAddress.getReceiverAddress())); list.set(i,userAddress); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通