一,导入表情jar包   emoji-java-4.0.0.jar

二,工具类

package com.javajy.util;

import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.apache.commons.lang.StringUtils;

import com.vdurmont.emoji.EmojiParser;

public class EmojiUtil extends EmojiParser {
    
    /**
     * 表情
     * @param str 内容
     * @return
     */
  1.  public static String onlyEmojiToUnicode(String str){
        if(str==null || "".equals(str)) 
            return "";
        StringBuffer sbf = new StringBuffer();
        for(int i = 0;i<str.length();i++){
            char c = str.charAt(i);
            if(!EmojiUtil.isEmojiCharacter(str.charAt(i)))//判断
                sbf.append(EmojiUtil.getUnicode(String.valueOf(c)));//将表情转换unicode
            else
                sbf.append(c);
        }
        System.out.println(sbf.toString());
//        System.out.println(EmojiUtil.getNonEmojiString(beforeStr));//获取非表情字符
//        String unicode = EmojiUtil.getUnicode(EmojiUtil.getEmojiUnicodeString(beforeStr));//获取表情字符
        
        return sbf.toString();
    }
    
 2.   public 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));
    }
    
    /**将表情字符串转成Unicode
     * @param source
     * @return
     */
 3.   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;
    }
    
     //字符串转换unicode
    public static String stringToUnicode(String string) {
        StringBuffer unicode = new StringBuffer();
        for (int i = 0; i < string.length(); i++) {
            char c = string.charAt(i);  // 取出每一个字符
            unicode.append("\\u" +Integer.toHexString(c));// 转换为unicode
        }
        return unicode.toString();
    }
    /**
     * 把十六进制Unicode编码字符串转换为中文字符串
     */
    public static String unicodeToString(String str) {
        Pattern pattern = Pattern.compile("(\\\\u(\\p{XDigit}{2,4}))");
        Matcher matcher = pattern.matcher(str);
        char ch;
        while (matcher.find()) {
            ch = (char) Integer.parseInt(matcher.group(2), 16);
            str = str.replace(matcher.group(1), ch + "");
        }
        return str;
    }

/**
       * 获取非表情字符串
       * @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() {
              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());
      }
    /**
     * 检测是否有emoji字符
     * @param source
     * @return 一旦含有就抛出
     */
    public static boolean containsEmoji(String source) {
        if (StringUtils.isBlank(source)) {
            return false;
        }

int len = source.length();

for (int i = 0; i < len; i++) {
            char codePoint = source.charAt(i);

if (isEmojiCharacter(codePoint)) {
                //do nothing,判断到了这里表明,确认有表情字符
                return true;
            }
        }

return false;
    }

/**
     * 过滤emoji 或者 其他非文字类型的字符
     * @param source
     * @return
     */
    public static String filterEmoji(String source) {
        source = source.replaceAll("[\\ud800\\udc00-\\udbff\\udfff\\ud800-\\udfff]", "*");
        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 (isEmojiCharacter(codePoint)) {
                if (buf == null) {
                    buf = new StringBuilder(source.length());
                }

buf.append(codePoint);
            } else {
                buf.append("*");
            }
        }

if (buf == null) {
            return source;//如果没有找到 emoji表情,则返回源字符串
        } else {
            if (buf.length() == len) {//这里的意义在于尽可能少的toString,因为会重新生成字符串
                buf = null;
                return source;
            } else {
                return buf.toString();
            }
        }

}
}

三。调用该工具方法

String content = EmojiUtil.onlyEmojiToUnicode("内容");

Java之~ 存储表情图EmojiUtil工具类相关推荐

  1. (10)Java泛型-Map集合-集合框架工具类-可变参数-静态导入

    -- 部分1.5新特性Java泛型-Map集合-集合框架工具类 泛型 概述: JDK1.5版本以后出现的新特性,用于解决安全问题,是一个类型安全机制. 对于泛型可以这样理解: 没有使用泛型时,只要是对 ...

  2. Java实现Google的S2算法工具类

    WGS84坐标系 GCJ02坐标系 BD09坐标系的各种转换 WGS84坐标系 GCJ02坐标系 BD09坐标系的各种转换 Google S2 经纬度 转 CellId 经纬度 转 cellToken ...

  3. Java 图片添加数字暗水印工具类

    Java 图片添加数字暗水印工具类. package cnki.thesis.common.utils;import org.opencv.core.*;import java.util.ArrayL ...

  4. Java学习总结:58(Collections工具类)

    Collections工具类 Java提供了一个集合的工具类--Collections,这个工具类可以实现List.Set.Map集合的操作.Collections类的常用方法如下: No. 方法 类 ...

  5. java配置文件工具类,java项目加载配置文件的工具类

    java项目加载配置文件的工具类 package com.loadproperties; import java.io.IOException; import java.io.InputStream; ...

  6. Java时间戳与日期格式转换工具类

    Java时间戳与日期格式转换工具类 在做web开发时,有时候需要用到时间戳,在前台进行日期转换,从数据库中取出来是日期格式的,这里记录下使用的转换工具类(这些都是静态方法,通过类名.方法的形式即可调用 ...

  7. java获取客户端的IP地址工具类

    java获取客户端的IP地址工具类 import java.net.InetAddress; import java.net.UnknownHostException;import javax.ser ...

  8. Java判断不为空的工具类总结

    Java判断不为空的工具类总结 1.Java判断是否为空的工具类,可以直接使用.包含,String字符串,数组,集合等等. 1 package com.bie.util; 2 3 import jav ...

  9. java 数字转化为汉字_工具类_java 数字转化为汉字大写

    public class Num2Rmb { private String[] hanArr = { "零", "壹", "贰", &quo ...

最新文章

  1. matlab中fdyn,Matlab的用法总结
  2. 计算机考古:发现世界上最古老的用户手册
  3. QT的QMultiHash类的使用
  4. 计算机组成原理随笔(一)
  5. javaWeb项目部署至tomcat下classes文件夹没有内容
  6. C语言那年踩过的坑--局部变量,静态变量,全局变量在内存中存放的位置
  7. php jquery 源码,最新版jQuery 2.1.0完整
  8. 去哪儿-15-keep-alive
  9. 粒子群matlab工具箱,科学网—PSO粒子群优化算法Matlab工具箱 - 白途思的博文
  10. MySQL中的事务隔离级别
  11. linux find返回数据不一样,请问一个linux的find的问题,如何让find的返回结果不显示“Perm...
  12. C++ static、const和static const 以及它们的初始化
  13. Hadoop——Yarn(4)
  14. 正则表达式学习(一)
  15. JavaScript的事件委托(事件代理)原理
  16. Python:tkinter简易广告牌
  17. java计算机毕业设计房屋租赁管理系统源码+系统+lw+数据库+调试运行
  18. 第一次修U盘,没想到...
  19. LBP(局部二进制模式)
  20. 博图用到c语言了吗,浅谈西门子TIA博图软件

热门文章

  1. mac下使用lsof命令查看链路状态
  2. 使用 Mybatis 真心不要偷懒!,达内Java百度云
  3. 一个人如何做好社群管理?维护社群的日常管理
  4. [Project Euler 429] Sum of squares of unitary divisors(数论)
  5. MES系统如何实现质量管理?
  6. linux虚拟机重新分配硬盘空间
  7. 薪资25k,从华为外包测试“跳”入字节,说说我转行做测试的这5年...
  8. 新能源汽车电池管理系统BMS电控开发测试实验室方案
  9. uniapp 阿里云 oss 上传文件/图片
  10. 3. Python 面向对象编程