前言
项目中存在需要截取字符串长度,比如仪表需要显示歌曲信息时,由于存在字节限制,因此传输时需要截取一部分。
记录于此,方便自己查阅。
正文
需求
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); }
参考文章
历史上的今天
暂无评论...
随机推荐
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...