表情符号过滤

来源:互联网 发布:威宁谢成本数据库 编辑:程序博客网 时间:2024/05/06 08:22


public class EmojiFilter {
/**
* 过滤emoji 或者 其他非文字类型的字符

* @param source 需要被过滤的字符串
* @return
*/
public static String filterEmoji(Object source) {
String sourceStr = " ";//针对微信传递过来的值为空数据时,默认为空字符串
if(Toolkit.isEmpty(source)){
return sourceStr;
}

sourceStr = source.toString();

Pattern emoji = Pattern.compile("[\ud83c\udc00-\ud83c\udfff]|[\ud83d\udc00-\ud83d\udfff]|[\u2600-\u27ff]",
Pattern.UNICODE_CASE | Pattern.CASE_INSENSITIVE);
Matcher emojiMatcher = emoji.matcher(sourceStr);
if (emojiMatcher.find()) {
sourceStr = emojiMatcher.replaceAll("");
return sourceStr;
}

return sourceStr;
}

// emoji表情字符串 mysql utf8数据库无法o.
public static String filterEmoji1(String source) {  
        if(source != null)
        {
            Pattern emoji = Pattern.compile ("[\ud83c\udc00-\ud83c\udfff]|[\ud83d\udc00-\ud83d\udfff]|[\u2600-\u27ff]",Pattern.UNICODE_CASE | Pattern . CASE_INSENSITIVE ) ;
            Matcher emojiMatcher = emoji.matcher(source);
            if ( emojiMatcher.find()) 
            {
                source = emojiMatcher.replaceAll("*");
                return source ; 
            }
        return source;
       }
       return source;  
    }


/** 
     * 将emoji表情替换成* 
     *  
     * @param source 
     * @return 过滤后的字符串 
     */  
    public static String filterEmoji(String source) {  
        if(StringUtils.isNotBlank(source)){  
            return source.replaceAll("[\\ud800\\udc00-\\udbff\\udfff\\ud800-\\udfff]", "*");  
        }else{  
            return source;  
        }  
    }  
    public static void main(String[] arg ){  
        try{  
            String text = "啦啦啦\uD83C\uDFA6 face\uD860\uDD5D \uD860\uDE07 \uD860\uDEE2 \uD863\uDCCA \uD863\uDCCD \uD863\uDCD2 \uD867\uDD98 ";  
            String text1 =  EmojiFilter.emojiConvert1(text);
            System.out.println(text1);  
            
            String text2 = EmojiFilter.emojiRecovery2(text1);
            System.out.println(text2);
        }catch (Exception ex){  
            ex.printStackTrace();  
        }  
    }  
    
    
    /** 
     * @Description 将字符串中的emoji表情转换成可以在utf-8字符集数据库中保存的格式(表情占4个字节,需要utf8mb4字符集) 
     * @param str 
     *            待转换字符串 
     * @return 转换后字符串 
     * @throws UnsupportedEncodingException 
     *             exception 
     */  
    public static String emojiConvert1(String str)  
            throws UnsupportedEncodingException {  
        String patternString = "([\\x{10000}-\\x{10ffff}\ud800-\udfff])";  
      
        Pattern pattern = Pattern.compile(patternString);  
        Matcher matcher = pattern.matcher(str);  
        StringBuffer sb = new StringBuffer();  
        while(matcher.find()) {  
            try {  
                matcher.appendReplacement(  
                        sb,  
                        "[["  
                                + URLEncoder.encode(matcher.group(1),  
                                        "UTF-8") + "]]");  
            } catch(UnsupportedEncodingException e) {  
//                LOG.error("emojiConvert error", e);  
                throw e;  
            }  
        }  
        matcher.appendTail(sb);  
//        LOG.debug("emojiConvert " + str + " to " + sb.toString()  
//                + ", len:" + sb.length());  
        return sb.toString();  
    }  
      
    /** 
     * @Description 还原utf8数据库中保存的含转换后emoji表情的字符串 
     * @param str 
     *            转换后的字符串 
     * @return 转换前的字符串 
     * @throws UnsupportedEncodingException 
     *             exception 
     */  
    public static String emojiRecovery2(String str)  
            throws UnsupportedEncodingException {  
        String patternString = "\\[\\[(.*?)\\]\\]";  
      
        Pattern pattern = Pattern.compile(patternString);  
        Matcher matcher = pattern.matcher(str);  
      
        StringBuffer sb = new StringBuffer();  
        while(matcher.find()) {  
            try {  
                matcher.appendReplacement(sb,  
                        URLDecoder.decode(matcher.group(1), "UTF-8"));  
            } catch(UnsupportedEncodingException e) {  
//                LOG.error("emojiRecovery error", e);  
                throw e;  
            }  
        }  
        matcher.appendTail(sb);  
//        LOG.debug("emojiRecovery " + str + " to " + sb.toString());  
        return sb.toString();  
    }  

}
0 0
原创粉丝点击