前言
项目中存在需要截取字符串长度,比如仪表需要显示歌曲信息时,由于存在字节限制,因此传输时需要截取一部分。
记录于此,方便自己查阅。
正文
需求
UTF-8下长度超过50个字节的歌曲名需要截断。
思路
在Java中,如果你想要截取一个UTF-8编码的字符串,使其总字节长度不超过N个字节,并且需要正确处理汉字(或其他多字节字符),可以按照以下步骤来实现:
将字符串转换为字节数组,确保使用UTF-8编码。
检查字节数组的长度,如果它超过了N个字节,则截取前N个字节。
从字节数组中构造一个新的字符串,确保在遇到不完整的字符时正确处理。
解决方式
计算每个char占用字节个数
public String limitUtf8String(String string, int maxSize) { if (TextUtils.isEmpty(string) || maxSize <= 0) { return ""; } int length = string.length(); int count = 0; int i = 0; while (count < maxSize && i < length) { char ch = string.charAt(i); count += String.valueOf(ch).getBytes(java.nio.charset.StandardCharsets.UTF_8).length; i++; } // 如果i < length,说明我们截取了一个汉字的一部分,需要回退到前一个字符 if (count > maxSize && i < length) { i--; } return string.substring(0, i); }
参考文章
© 版权声明