前言

项目中存在需要截取字符串长度,比如仪表需要显示歌曲信息时,由于存在字节限制,因此传输时需要截取一部分。

记录于此,方便自己查阅。

正文

本文使用了百度AI助手搜索的。

需求

UTF-8下长度超过50个字节的歌曲名需要截断。

思路

在Java中,如果你想要截取一个UTF-8编码的字符串,使其总字节长度不超过N个字节,并且需要正确处理汉字(或其他多字节字符),可以按照以下步骤来实现:

  1. 将字符串转换为字节数组,确保使用UTF-8编码。

  2. 检查字节数组的长度,如果它超过了N个字节,则截取前N个字节。

  3. 从字节数组中构造一个新的字符串,确保在遇到不完整的字符时正确处理。

解决方式

计算每个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);
    }

参考文章

本文内容来自百度AI助手

相关文章

暂无评论

none
暂无评论...