打赏

写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的十六进制和数据,类似于&#x1f609”); // taskPaidInteractVo.setInteractContent(hexadecimal); // } // 反解析,将存入数据库的&#x1f609转换为表情对应的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);

        }

 

posted @ 2020-05-27 13:36  张学涛  阅读(924)  评论(0编辑  收藏  举报