1.输入监听emoji,然后拦截掉

/**

* 将系统表情转化为字符串

*

* @param s

* @return

*/

public static boolean havaEmoji(String s) {

int length = s.length();

String context = "";

//循环遍历字符串,将字符串拆分为一个一个字符

for (int i = 0; i < length; i++) {

char codePoint = s.charAt(i);

//判断字符是否是emoji表情的字符

if (isEmojiCharacter(codePoint)) {

//如果是就返回

return true;

}

}

return false;

}

//使用

mBinding.etContent.addTextChangedListener(new TextWatcher() {

@Override

public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

}

@Override

public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {

}

@Override

public void afterTextChanged(Editable editable) {

int index = mBinding.etContent.getSelectionStart();//获取光标位置

if (havaEmoji(editable.toString())) {//包含表情就删掉这个表情

editable.delete(index - 1, index);//删除光标前的字符

return;

}

}

});

2.不拦截掉emoji,直接约定转换,前端转成String,后台接受时转成emoji

//前台转换

/**

* 将系统表情转化为字符串

*

* @param s

* @return

*/

public static String getString(String s) {

int length = s.length();

String context = "";

//循环遍历字符串,将字符串拆分为一个一个字符

for (int i = 0; i < length; i++) {

char codePoint = s.charAt(i);

//判断字符是否是emoji表情的字符

if (isEmojiCharacter(codePoint)) {

//如果是将以大括号括起来

String emoji = "{" + Integer.toHexString(codePoint) + "}";

context = context + emoji;

continue;

}

context = context + codePoint;

}

return context;

}

/**

* 是否包含表情

*

* @param codePoint

* @return 如果不包含 返回false,包含 则返回true

*/

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)));

}

//后台转换

/**

* 将表情描述转换成表情

*

* @param str

* @return

*/

public static String getEmoji(Context context, String str) {

String string = str;

String rep = "\\{(.*?)\\}";

Pattern p = Pattern.compile(rep);

Matcher m = p.matcher(string);

while (m.find()) {

String s1 = m.group().toString();

String s2 = s1.substring(1, s1.length() - 1);

String s3;

try {

s3 = String.valueOf((char) Integer.parseInt(s2, 16));

string = string.replace(s1, s3);

} catch (Exception e) {

e.printStackTrace();

}

}

return string;

}

标签:codePoint,return,String,处理,int,context,android,emoji,Emoji

来源: https://blog.csdn.net/qq_27381325/article/details/88116799

android emoji 转字符串,android Emoji的处理相关推荐

  1. android消息发送字符串,android - 从Android客户端通过HTTP在HL7消息中发送base64字符串时遇到错误 - 堆栈内存溢出...

    我正在android客户端(API 17)中使用HL7消息,并使用Hapi库生成和解析HL7消息.当我传输小的字符串值时,该消息工作正常. 但是我必须通过Http将图像发送到HL7服务器,为此,我正在 ...

  2. android 表示空字符串,Android Logcat获取空字符串时非常奇怪的行为

    这是一个有趣的问题.我只是在LogRabbit中尝试过,并且能够看到相同的结果. 我快速浏览了android源代码,看到Log.W(-)最终以本机代码显示并在logd_write.c中得到处理 这基本 ...

  3. android获取未知字符串,android – 未知的URL内容:// downloads / my_dow...

    我正在使用Download Manger下载一些多媒体文件并对其进行分类.我也在使用Crashlytics,这是一个错误,我经常在不同的设备和Android版本上得到它.我正在寻找你的解决方案/建议! ...

  4. android 去空字符串,android – TextUtils.isEmpty()方法为空字符串返回false

    对于空字符串,它应该返回true. 从TextUtils的源代码: public static boolean isEmpty(@Nullable CharSequence str) { if (st ...

  5. android读取xml 字符串,Android 读取本地Xml文件,并转换成String

    问题 不是解析本地 xml 文件, 而是要将 xml 文件中的所有内容(包含格式,标签等),直接转换成 String. 与前端H5页面交互时, iOS 在请求远程 xml 文件耗时太长(有时需要4~5 ...

  6. android 上传字符串,Android中发送Http请求(包括文件上传、servlet接收)的实例代码...

    /** * 通过拼接的方式构造请求内容,实现参数传输以及文件传输 * @param actionUrl * @param params * @param files * @return * @thro ...

  7. Android 显示输入法中的emoji表情以及String字符串转码

    Android 显示输入法中的emoji表情以及String字符串转码 实现用原生键盘输入表情并显示,有两种办法: 发送时将String字符串转换为Unicode编码字符串,显示接收的列表时用Unic ...

  8. android 表情字符串,Android 显示输入法中的emoji表情以及String字符串转码

    实现用原生键盘输入表情并显示,有两种办法: 发送时将String字符串转换为Unicode编码字符串,显示接收的列表时用Unicode编码字符串转化为String字符串 发送时将String字符串转换 ...

  9. ios emjoi java_前端App开发,实际工作中三端(android,ios,前端H5)emoji表情显示解决方案...

    想起最近开发APP的时候,产品提的一个需求,用户的帖子正文还有评论内容里,要能够显示emoji表情,因为我们这款app是混合开发的,APP里的发贴,发评论是原生做的(android和ios),但帖子详 ...

最新文章

  1. 白话Elasticsearch08-深度探秘搜索技术之基于boost的细粒度搜索条件权重控制
  2. Windows Forms DataGridView 中合并单元格
  3. MMSE法用于MIMO系统
  4. 最佳网页宽度及其实现
  5. IP和网段及子网掩码基础知识
  6. 阿里技术面:ReadWriteLock读写之间互斥吗?
  7. C++特殊符号:【优先级】
  8. shell特殊符、sort、tee、
  9. 欧几里德算法(模板)
  10. java中的linearnumexpr,java - Cplex中的上限和下限等于0.0(在cplex中) - 堆栈内存溢出...
  11. EPSG:900913 与 EPSG:4326 转换方法
  12. Vue2.0搭建脚手架(vue-cli)
  13. Python实现分卷压缩
  14. 电压(电流)运算放大器为什么要增大(减小)输入阻抗?
  15. Python几种开发工具介绍
  16. android中的ellipsize设置(省略号的问题)
  17. 去哪儿网上海景点数据爬虫分析
  18. 奥克兰大学CS110(Auckland University Computer Science 110)的一些算法(2022)
  19. 获取32位整型变量中某一位的bit值
  20. 零跑C11的“一骑绝尘”

热门文章

  1. 【力扣周赛】第345场周赛
  2. 为drupal安装 Php + Apache 的参考文章
  3. tree结构穿梭 vue_结合el-tree和el-transfer搞一个树形穿梭框
  4. 安装open***并使用证书+用户名密码登录
  5. 视频编码h264怎么看_新手怎么上高速,视频拍给你看
  6. 董事会审计委员会职能是什么?
  7. Day21-30 - Web前端概述
  8. QSettings 读写注册表、配置文件
  9. 生命,宇宙以及一切事物的答案是...42?
  10. Aurora ip核的使用详解