问题根本
截取不完整,原本完整的一段表情,被当做成2个字节截取了。当表情在截取边界的时候就会出现乱码。
解决思路
从按字节截取,改为按字符截取。
/**
* Emoji 添加截取工具类
* @param resourse 源字符串
* @param length 需要保留几个字,一个Emoji算一个字
* @return
*/
public static String subStr(@NonNull String resourse, int length){
char[] chars = resourse.toCharArray();
StringBuilder stringBuilder = new StringBuilder();
int sum = 0;
for (int i = 0; i < chars.length; i++) {
if (sum > length - 1) {
break;
}
if (isEmojiCharacter(chars[i])) {
stringBuilder.append(chars[i]);
stringBuilder.append(chars[i + 1]);
i = i + 1;
sum = sum + 1;
}else {
stringBuilder.append(chars[i]);
sum = sum + 1;
}
}
return stringBuilder.toString();
}
}