UTF-8下指定字节个数截断字符串

Android  Java  2024年10月25日 am8:58发布1个月前更新 城堡大人
42 0 0

前言

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

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

正文

本文使用了百度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助手

 历史上的今天

  1. 2023: nginx服务器开启Gzip(0条评论)
  2. 2021: 拷贝文件时异常断电导致文件拷贝失败(0条评论)
  3. 2019: 川端康成:父母的心(0条评论)
  4. 2017: Android的Log等级介绍以及自定义Log工具类(0条评论)
版权声明 1、 本站名称: 笔友城堡
2、 本站网址: https://www.biumall.com/
3、 本站部分文章来源于网络,仅供学习与参考,如有侵权,请留言

暂无评论

暂无评论...

随机推荐

Android Button 字母自动变大写记录

前言开发中,Button控件的Text 自动转为大写字母,这里记录一下,方便自己查询。好记性不如烂笔头正文字母自动变大写的原因只要我们用的Theme是Material或API Level 21+的默认 Theme,Button上的Text默认就是大写。解决方式第一种方法在Xml中的...

修改logcat缓存大小

前言Android机器在打印logcat时,偶然由于日志输出过大,会出现如下问题adb logcat read: unexpected EOF!然后被强制性退出了打印。解决的方法有两种,一种是使用adb临时修改,断电就恢复,一种是代码中修改,永久性存在。正文永久修改logcat缓存...

Android图片旋转+倒影

前言根据前面两篇文章,这里进行组合也就是倒影+旋转,顺便加上了倒影渐变。效果如图。正文直接上代码<!-- layout_height= 倒影高度+分割线高度+图片高度,否则显示不全 -->​<com.biumall.reflectview.view.Rotat...

Android自定义view生命周期

自定义布局或者自定义view都是一样的流程周期如下 #  进入 onFinishInflate: onAttachedToWindow: onWindowVisibilityChanged: onVisibilityChanged: on...

贾平凹:制造声音

我去采访这个州刚刚离休的专员。采访结束后我们坐在客厅喝茶,他却放了一段录音问我听到什么,我说是风里的树声。是树声,他说,你听得懂这树声吗?有树风就有了形状,但风里的树是要说话的。你知道,这个州是一个贫困的地区,但因处在交通要道上,过往的官员就特别多。我已经是上些岁数的人,实在不宜于干那些恭迎欢送...

rc文件规则简介

前言上一篇大致的走了一下init.cpp的流程,其中很重要的一环就是解析.rc文件,在介绍init.rc之前先学习一下rc文件的语法。内容主要来源参考文正文什么是rc文件在进入init.rc之前,我们需要先了解一下.rc文件。rc文件,是用Android Init Language...