锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

java 过滤特殊字符串和emoji表情符号

时间:2023-12-01 13:37:04 4083d06pd光电传感器

问题描述

如今,许多用户昵称包括特殊字符串和用户评论emoji表情,但是编码传输的问题导致传输失败,还有Emoji表情是四个字节,而且Mysql的utf8编码最多3个字节,数据无法写入数据库 。


解决方案

我们可以根据正则表达式过滤特殊字符串和Emoji表情符号。

代码实现

package com.zcjd.config;  import lombok.extern.slf4j.Slf4j;  import java.util.regex.Matcher; import java.util.regex.Pattern;  /** * @author 凌乱的枫叶 * @ClassName StringUtil * @Description 过滤工具包 * @createTime 2022-07-19 10:14:00 */ @Slf4j public class StringUtil { 
              /** * 过滤特殊字符 * @param str * @return */     public static String filterStr (String str){ 
                 String regEx="[`~!@#$%^&*() =|\\[\\].<>/?~!@#¥%……&*()—— |{}";         Pattern p = Pattern.compile(regEx);         Matcher m = p.matcher(str);         return m.replaceAll("").trim();     }      /** * 过滤emoji用表情代替表情* * @param source * @return */     public static String filterEmoji(String source) { 
                 if(source != null) { 
                     Pattern emoji = Pattern.compile(
       
        "[\ud83c\udc00-\ud83c\udfff]|[\ud83d\udc00-\ud83d\udfff]|[\u2600-\u27ff]|" 
        + 
        "[\ud83e\udd00-\ud83e\uddff]|[\u2300-\u23ff]|[\u2500-\u25ff]|[\u2100-\u21ff]|[\u00a0-\u0fff]|[\u2b00-\u2bff]|[\u2d06]|[\u3030]" 
        ,
        Pattern
        .UNICODE_CASE 
        | 
        Pattern
        .CASE_INSENSITIVE 
        ) 
        ; 
        Matcher emojiMatcher 
        = emoji
        .
        matcher
        (source
        )
        ; 
        if 
        (emojiMatcher
        .
        find
        (
        )
        ) 
        { 
          source 
        = emojiMatcher
        .
        replaceAll
        (
        "*"
        )
        ; 
        return source 
        ; 
        } 
        return source
        ; 
        } 
        return source
        ; 
        } 
        /** * 过滤表情符号 * @param content * @return */ 
        public 
        static 
        String 
        filterEmoji2
        (
        String content
        ) 
        { 
          
        StringBuilder sb 
        = 
        new 
        StringBuilder
        (
        )
        ; 
        for 
        (
        char ch 
        : content
        .
        toCharArray
        (
        )
        ) 
        { 
          
        if 
        (
        !
        Character
        .
        isHighSurrogate
        (ch
        ) 
        && 
        !
        Character
        .
        isLowSurrogate
        (ch
        )
        ) 
        { 
          sb
        .
        append
        (ch
        )
        ; 
        } 
        } 
        if 
        (sb
        .
        length
        (
        ) 
        < content
        .
        length
        (
        )
        ) 
        { 
          log
        .
        info
        (content
        .
        length
        (
        ) 
        + 
        " 过滤掉 " 
        + sb
        .
        length
        (
        )
        )
        ; 
        } 
        return sb
        .
        toString
        (
        )
        ; 
        } 
        } 
       
锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章