题目:编写一个截取字符串的函数,输入为一个字符串和字节数, 输出为按字节截取的字符串,但要保证汉字不被截取半个,如"我ABC",4,应该截取"我AB",输入"我ABC汉DEF",6, 应该输出"我ABC",而不是"我ABC+汉的半个"。
我们都知道在计算机中,存储一个汉字需要至少两个字节。例如:gbk和gb2312都是用两个字节存储一个汉字,而UTF-8是用三个字节存储一个汉字。关于字符编码请看:汉字与字符编码。下面使用两种方法对字符串进行截取。
第一种方法
适用字符集:UTF-8,gb2312,gbk
思路:依次截取字符串的每个字符,根据字符编码获取其字节数temp_len,total用以记录每次截取字符后及之前截取字符字节数之和,然后判断total是否小于等于所需要截取字节长度(length),如果小于说明还没超过所需要截取字节长度,那么截取字符的长度(len)+1,如果total>length说明已经超出所需要截取的字节长度,此时的len就是所需要截取原字符串的长度
第二种方法
适用字符集:gb2312,gbk
gbk汉字编码是两个字节为一个字符,高字节是小于0的(原因我也不清楚),设置一标志变量bChineseFirstHalf为false,如果获取到的字节小于0且bChineseFirstHalf为false,说明这是汉字的前半个字节,则bChineseFirstHalf设置为true,否则,num(最终需要截取字符串长度)加1。一直循环到字节数i等于需要截取的字节数length
具体代码
package com.zyh.interview;
import java.io.UnsupportedEncodingException;
/**
* 编写

这篇博客探讨了在面试中常见的一个问题:如何编写一个函数,按字节截取字符串,同时保证汉字不被分割。文章介绍了两种方法,分别适用于不同的字符集,如UTF-8、gb2312和gbk,并提供了具体的代码实现。
最低0.47元/天 解锁文章
880

被折叠的 条评论
为什么被折叠?



