面试题-字符串按字节截取

之前面试面试题上有这样一个题目,当时没给答上来,回来之后自己写了一下

原题是这样的:写一个字符串截取的方法,参数一个字符串和截取长度,要求汉字按两个字节返回,如“大大1111小”,当截取长度为5时返回“大大1”,当截取长度为3时,至返回“大”,不能返回乱码

代码如下:

public static String subStrByChar(String str , Integer index)
    {
        if (null == str || "".equals(str))
            return null;
        byte[] strByte = str.getBytes();
        //先获取截取的字节出的取值
        byte b = strByte[index-1];
        Integer realIndex = index;//要截取的真实字节数
        //如果为- 表示该字节表示中文的一部分
        if (b < 0)
        {
            //判断前一个字节是否为-如果不是后退一位截取
            int loop =0;
            for (int i=index-1;i>=0;i--)
            {
                if (strByte[i] > 0)
                    break;
                loop ++;
            }
            if (loop%2 != 0)
                realIndex = index -1;
        }
        byte[] realByte = new byte[realIndex];
        System.arraycopy(strByte, 0, realByte, 0, realIndex);
        String subEndStr = new String(realByte);
        return subEndStr;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值