截取emoji表情符

工作中遇到一个问题:为保护用户隐私 在评论区将用户名中间的字段使用*号代替
有的奇葩用户名中夹杂有表情字符,此时使用substring()进行截取操作,结果就有可能是乱码或者不符合要求因为JVM运行时使用UTF-16编码,实际Java自带特殊字符截取的方法offsetByCodePoints

例如String 类型的字符串是一组表情, 现在要将他进行一下操作:

String emoji="🐷👀🎈😍📌";

获取表情个数

  • codePointCount方法返回整个String中的表情个数,此时codePointCount=5
int codePointCount = emoji.codePointCount(0, emoji.length()); //返回指定文本中的Unicode代码点数

截取最后一个表情

sta=4 ,end=5
从第4个开始(不包括) 截取到第5个(包括)
确定截取的位置后,再使用substring截取

int sta =emoji.offsetByCodePoints(0 , codePointCount-1);//获取倒数第2个表情结束的位置(实际也是倒数第一个表情开始的位置)
int end =emoji.offsetByCodePoints(0 , codePointCount); //获取最后一个表情结束的位置

String subEmoji = emoji.substring(sta, end);    //subEmoji=📌

如果截取第一个,开始的位置为offsetByCodePoints(0 , 0); 结束为offsetByCodePoints(0 ,1);

中间三个用***代替

int repSta =emoji.offsetByCodePoints(0 , 1);//不包括第一个表情
int repEnd =emoji.offsetByCodePoints(0 , 4); //范围取第234个

StringBuffer buffer = new StringBuffer(emoji);
buffer.replace(repSta , repEnd , "***");
System.out.println(" buffer="+buffer.toString());   //buffer=🐷****📌
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 4,467评论 0 5
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 27,749评论 1 45
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 11,185评论 6 13
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,270评论 0 4
  • String类和正则表达式 今天的主要内容 Scanner类概述Scanner获取数据出现的小问题及解决方案 St...
    须臾之北阅读 1,955评论 0 3