【Java】微信昵称过滤emoji

/**
 * 过滤emoji 或者 其他非文字类型的字符
 * @param source 需要过滤的字符串
 * @return
 */
public static String filterEmoji(String source) {
    if (!containsEmoji(source)) {
        return source;
    }

    StringBuilder buf = null;
    int len = source.length();
    for (int i = 0; i < len; i++) {
        char codePoint = source.charAt(i);
        if (notisEmojiCharacter(codePoint)) {
            if (buf == null) {
                buf = new StringBuilder(source.length());
            }
            buf.append(codePoint);
        }
    }

    if (buf == null) {
        return "";
    } else {
        if (buf.length() == len) {
            buf = null;
            return source;
        } else {
            return buf.toString();
        }
    }
}

/**
 * 检测是否有emoji字符
 * @param source 需要判断的字符串
 * @return 一旦含有就抛出
 */
public static boolean containsEmoji(String source) {
    int len = source.length();
    for (int i = 0; i < len; i++) {
        char codePoint = source.charAt(i);
        if (!notisEmojiCharacter(codePoint)) {
            return true;
        }
    }
    return false;
}

/**
 * 非emoji表情字符判断
 * @param codePoint
 * @return
 */
public static boolean notisEmojiCharacter(char codePoint) {
    return (codePoint == 0x0) || (codePoint == 0x9) || (codePoint == 0xA) || (codePoint == 0xD)
            || ((codePoint >= 0x20) && (codePoint <= 0xD7FF)) || ((codePoint >= 0xE000) && (codePoint <= 0xFFFD))
            || ((codePoint >= 0x10000) && (codePoint <= 0x10FFFF));
}
posted @ 2022-10-20 14:37  小魁jking  阅读(165)  评论(0)    收藏  举报