java 处理emoji表情

Wesley13
• 阅读 770
public class EmojiUtil {
    /**
     * 将str中的emoji表情转为byte数组
     * 
     * @param str
     * @return
     */
    public static String resolveToByteFromEmoji(String str) {
        Pattern pattern = Pattern
                .compile("[^(\u2E80-\u9FFF\\w\\s`~!@#\\$%\\^&\\*\\(\\)_+-?()——=\\[\\]{}\\|;。,、《》”:;“!……’:'\"<,>\\.?/\\\\*)]");
        Matcher matcher = pattern.matcher(str);
        StringBuffer sb2 = new StringBuffer();
        while (matcher.find()) {
            matcher.appendReplacement(sb2, resolveToByte(matcher.group(0)));
        }
        matcher.appendTail(sb2);
        return sb2.toString();
    }

    /**
     * 将str中的byte数组类型的emoji表情转为正常显示的emoji表情
     * 
     * @param str
     * @return
     */
    public static String resolveToEmojiFromByte(String str) {
        Pattern pattern2 = Pattern.compile("<:([[-]\\d*[,]]+):>");
        Matcher matcher2 = pattern2.matcher(str);
        StringBuffer sb3 = new StringBuffer();
        while (matcher2.find()) {
            matcher2.appendReplacement(sb3, resolveToEmoji(matcher2.group(0)));
        }
        matcher2.appendTail(sb3);
        return sb3.toString();
    }

    private static String resolveToByte(String str) {
        byte[] b = str.getBytes();
        StringBuffer sb = new StringBuffer();
        sb.append("<:");
        for (int i = 0; i < b.length; i++) {
            if (i < b.length - 1) {
                sb.append(Byte.valueOf(b[i]).toString() + ",");
            } else {
                sb.append(Byte.valueOf(b[i]).toString());
            }
        }
        sb.append(":>");
        return sb.toString();
    }

    private static String resolveToEmoji(String str) {
        str = str.replaceAll("<:", "").replaceAll(":>", "");
        String[] s = str.split(",");
        byte[] b = new byte[s.length];
        for (int i = 0; i < s.length; i++) {
            b[i] = Byte.valueOf(s[i]);
        }
        return new String(b);
    }
}
点赞
收藏
评论区
推荐文章
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Wesley13 Wesley13
3年前
java采坑之路
判断相等字符串判断相等        String str1  null;        String str2  "java金融";       // str1.equals(str2);  错误的写法        str2.equals(str1); // 常量写前面        Objects.equ
Easter79 Easter79
3年前
string.Compare用法
string.Compare方法,用来比较2个字符串值得大小string.Compare(strA,strB,true);返回值:1:str1大于str20:str1等于str2\1:str1小于str2publicvoidCompareString(stringstrA,stringstrB)
Wesley13 Wesley13
3年前
java存储emoji表情解决方案
1、问题产生情况  在开发IM时有些有用的头像用了emoji表情或者聊天的时候用了emoji表情,然而mysql数据库用的编码是utf8\_general\_ci,就是utf8编码,结果也就报错误了。emoji表情存不了在数据库。  java.sql.SQLException:Incorrectstringvalue:'\\
Wesley13 Wesley13
3年前
java判断字符串是否为数字或中文或字母
1.判断字符串是否仅为数字:1用JAVA自带的函数public static boolean isNumeric(String str){  for (int i  str.length();i0;){      if (!Character.isDigit(str.charAt(i))){
Wesley13 Wesley13
3年前
java字符串比较和jdkequals源码分析
 package com.cnse.demo;/  比较两个字符串相等 /public class StringTest { public static void main(String args) {  int checkLength  0;  String str
Wesley13 Wesley13
3年前
Java获取精确到秒的时间戳
方法一:通过String.substring()方法将最后的三位去掉/获取精确到秒的时间戳@return/publicstaticintgetSecondTimestamp(Datedate){if(nulldate){return0;}Str
Wesley13 Wesley13
3年前
Java到底是引用传递还是值传递
前言前段时间在群里看到类似这样一个问题,下面的代码会输出什么呢?public void test(){   String str  "hello";   change(str);   System.out.println(str);}private void change(String str){  
Stella981 Stella981
3年前
Lua基础(字符处理)
字符串截取‍local str"abcdefghi"print(string.sub(str,2,3))    结果:bc,字符串索引为1开始,1为最后一个字符字符串转换local str"abcdefghi"string.lower(str)返回全部小写string.upper
Stella981 Stella981
3年前
BlockingQueue队列的使用
import java.util.concurrent.ArrayBlockingQueue;import java.util.concurrent.BlockingQueue;public class BlockingQueueTest { public static void main(String args)