判断过滤表情

来源:互联网 发布:统计不重复数据个数 编辑:程序博客网 时间:2024/05/29 18:32
/**
     * 判断是否含有emoj表情
     * @param source
     * @return
     */
    public static boolean containsEmoji(String source) {
        int len = source.length();
        boolean isEmoji = false;
        for (int i = 0; i < len; i++) {
            char hs = source.charAt(i);
            if (0xd800 <= hs && hs <= 0xdbff) {
                if (source.length() > 1) {
                    char ls = source.charAt(i + 1);
                    int uc = ((hs - 0xd800) * 0x400) + (ls - 0xdc00) + 0x10000;
                    if (0x1d000 <= uc && uc <= 0x1f77f) {
                        return true;
                    }
                }
            } else {
                // non surrogate
                if (0x2100 <= hs && hs <= 0x27ff && hs != 0x263b) {
                    return true;
                } else if (0x2B05 <= hs && hs <= 0x2b07) {
                    return true;
                } else if (0x2934 <= hs && hs <= 0x2935) {
                    return true;
                } else if (0x3297 <= hs && hs <= 0x3299) {
                    return true;
                } else if (hs == 0xa9 || hs == 0xae || hs == 0x303d
                        || hs == 0x3030 || hs == 0x2b55 || hs == 0x2b1c
                        || hs == 0x2b1b || hs == 0x2b50 || hs == 0x231a) {
                    return true;
                }
                if (!isEmoji && source.length() > 1 && i < source.length() - 1) {
                    char ls = source.charAt(i + 1);
                    if (ls == 0x20e3) {
                        return true;
                    }
                }
            }
        }
        return isEmoji;
    }


    private static boolean isEmojiCharacter(char codePoint) {
        return (codePoint == 0x0) || (codePoint == 0x9) || (codePoint == 0xA)
                || (codePoint == 0xD)
                || ((codePoint >= 0x20) && (codePoint <= 0xD7FF))
                || ((codePoint >= 0xE000) && (codePoint <= 0xFFFD))
                || ((codePoint >= 0x10000) && (codePoint <= 0x10FFFF));
    }


    /**
     * 过滤emoji 或者 其他非文字类型的字符
     * 
     * @param source
     * @return
     */
    public static String filterEmoji(String source) {
        if (StringUtils.isBlank(source)) {
            return source;
        }
        StringBuilder buf = null;
        int len = source.length();
        for (int i = 0; i < len; i++) {
            char codePoint = source.charAt(i);
            if (isEmojiCharacter(codePoint)) {
                if (buf == null) {
                    buf = new StringBuilder(source.length());
                }
                buf.append(codePoint);
            }
        }
        if (buf == null) {
            return source;
        } else {
            if (buf.length() == len) {
                buf = null;
                return source;
            } else {
                return buf.toString();
            }
        }
    }
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 如果造事者拒不执行赔偿怎么办? 遇到新疆暴徒来怎么办 隆胸一年下垂了怎么办 自动雨伞坏了怎么办 手机验证码搞忘了怎么办 uplay 登录不上怎么办 滴滴账号永久封禁怎么办 steam游戏买不了怎么办 电脑登不了游戏怎么办 育碧帧数低怎么办 帐号被盗怎么办微信 育碧登录错误怎么办 头盔买小了怎么办 上海离职了社保怎么办 日本瓦斯没交怎么办 半自动咖啡机自动出水怎么办 父母太粘自己怎么办 铜耳环变黑了怎么办 秋田犬爱打架怎么办 僧人建设庙宇资金怎么办 wifi总是掉线怎么办 微博授权失败怎么办 新浪微博被官方封号怎么办 电磁波辐射重度异常怎么办 卖鞋没有生意怎么办 华为手机越来越卡怎么办 华为手机电越充越少怎么办 土炕有裂缝冒烟怎么办 农村土炕不好烧怎么办 夏天土炕不好烧怎么办 怎么办我是个肚脐控 联想笔记本电池显示损坏怎么办 电脑关机没反应怎么办 变色灯坏了怎么办 衣服颜色太艳怎么办 自行车掉链子怎么办图解 南联邦大学怎么办入学 群租公寓业主怎么办 孩子上课不举手怎么办 门颜色太难看怎么办 玛雅水公园下雨怎么办