Java之~ 存储表情图EmojiUtil工具类
一,导入表情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工具类相关推荐
- (10)Java泛型-Map集合-集合框架工具类-可变参数-静态导入
-- 部分1.5新特性Java泛型-Map集合-集合框架工具类 泛型 概述: JDK1.5版本以后出现的新特性,用于解决安全问题,是一个类型安全机制. 对于泛型可以这样理解: 没有使用泛型时,只要是对 ...
- Java实现Google的S2算法工具类
WGS84坐标系 GCJ02坐标系 BD09坐标系的各种转换 WGS84坐标系 GCJ02坐标系 BD09坐标系的各种转换 Google S2 经纬度 转 CellId 经纬度 转 cellToken ...
- Java 图片添加数字暗水印工具类
Java 图片添加数字暗水印工具类. package cnki.thesis.common.utils;import org.opencv.core.*;import java.util.ArrayL ...
- Java学习总结:58(Collections工具类)
Collections工具类 Java提供了一个集合的工具类--Collections,这个工具类可以实现List.Set.Map集合的操作.Collections类的常用方法如下: No. 方法 类 ...
- java配置文件工具类,java项目加载配置文件的工具类
java项目加载配置文件的工具类 package com.loadproperties; import java.io.IOException; import java.io.InputStream; ...
- Java时间戳与日期格式转换工具类
Java时间戳与日期格式转换工具类 在做web开发时,有时候需要用到时间戳,在前台进行日期转换,从数据库中取出来是日期格式的,这里记录下使用的转换工具类(这些都是静态方法,通过类名.方法的形式即可调用 ...
- java获取客户端的IP地址工具类
java获取客户端的IP地址工具类 import java.net.InetAddress; import java.net.UnknownHostException;import javax.ser ...
- Java判断不为空的工具类总结
Java判断不为空的工具类总结 1.Java判断是否为空的工具类,可以直接使用.包含,String字符串,数组,集合等等. 1 package com.bie.util; 2 3 import jav ...
- java 数字转化为汉字_工具类_java 数字转化为汉字大写
public class Num2Rmb { private String[] hanArr = { "零", "壹", "贰", &quo ...
最新文章
- matlab中fdyn,Matlab的用法总结
- 计算机考古:发现世界上最古老的用户手册
- QT的QMultiHash类的使用
- 计算机组成原理随笔(一)
- javaWeb项目部署至tomcat下classes文件夹没有内容
- C语言那年踩过的坑--局部变量,静态变量,全局变量在内存中存放的位置
- php jquery 源码,最新版jQuery 2.1.0完整
- 去哪儿-15-keep-alive
- 粒子群matlab工具箱,科学网—PSO粒子群优化算法Matlab工具箱 - 白途思的博文
- MySQL中的事务隔离级别
- linux find返回数据不一样,请问一个linux的find的问题,如何让find的返回结果不显示“Perm...
- C++ static、const和static const 以及它们的初始化
- Hadoop——Yarn(4)
- 正则表达式学习(一)
- JavaScript的事件委托(事件代理)原理
- Python:tkinter简易广告牌
- java计算机毕业设计房屋租赁管理系统源码+系统+lw+数据库+调试运行
- 第一次修U盘,没想到...
- LBP(局部二进制模式)
- 博图用到c语言了吗,浅谈西门子TIA博图软件
热门文章
- mac下使用lsof命令查看链路状态
- 使用 Mybatis 真心不要偷懒!,达内Java百度云
- 一个人如何做好社群管理?维护社群的日常管理
- [Project Euler 429] Sum of squares of unitary divisors(数论)
- MES系统如何实现质量管理?
- linux虚拟机重新分配硬盘空间
- 薪资25k,从华为外包测试“跳”入字节,说说我转行做测试的这5年...
- 新能源汽车电池管理系统BMS电控开发测试实验室方案
- uniapp 阿里云 oss 上传文件/图片
- 3. Python 面向对象编程