前几天作业帮面试的一道编程题,题目要求,给定一个UTF-8编码的字符串(字符数组的形式),返回该字符串的字符数量。
UTF-8编码介绍:
UTF-8编码中一个字符的长度为1-6个字节,其中,该字符的长度在第一个字节(byte)的前1-6位有表示,具体如下:
有了以上参考资料大体就有思路了,那就是遍历字符数组统计每个字符的长度,然后将i+字符长度-1,判断字符长度的时候,直接将byte与二进制的0b11111100,0b11111000,0b11110000,0b11100000,0b11000000比较就可以,但是java 的byte范围是-128~+127,是一个有符号数,和0 ~ 255的正整数比较起来实现起来有些困难,我当时在有限的时间内没有想到解决办法,回来之后重新理了理思路,整理了一下java的解法。
主要改进的地方是统计字符个数的时候,先将有符号的byte转化为了一个16进制的无符号数(String表示的),然后将其转化为int型再去比较。
实现代码如下:
import java.io.UnsupportedEncodingException;
public class GetUtf_8_Length {
private static int getcharnum(byte[] bytes) {
int count=0;
for(int i=0;i<bytes.length;i++) {
int len=getcharlen(b