java多字节字符串按字节截取

算法思路

1.先按照实际要截取的字节长度,复制一份字节数组

2.转换回字符串,计算字符长度resLen,并按这个长度截取原字符串

3.计算截取的字符串的字节数是否等于需求长度len,相等则直接返回,不相等,则在resLen的基础上减1再截取,则为需要的结果

此算法截取的结果为向前截取,即保证最终截取的字节长度不能超过需求长度len,比如gbk字符集,"一二三四五",截取3字节,结果应为"一",实际长度为2字节,第3个字节为半个中文,属于无效字符,需要去掉。

在转换字节数组时,需要指定字符集,在不同的字符集下,转换出来的字节数组长度是不一样的。

经测试,效率要高于按循环的算法,尤其在截取长度较大时,性能较优

代码

public static String substr(String str, int len, 

                                String cs) throws UnsupportedEncodingException {

        byte[] br = new byte[len];

        byte[] bt = str.getBytes(cs);

        System.arraycopy(bt, 0, br, 0, len);

        String res = new String(br, cs);

        int resLen = res.length();

        if (str.substring(0, resLen).getBytes(cs).length > len) {

            res = str.substring(0, resLen - 1);

        }

        return res;

    }
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 35,386评论 18赞 399
  • 一、字符串操作 strcpy(p, p1) 复制字符串 strncpy(p, p1, n) 复制指定长度字符串 s...
    JaiUnChat阅读 1,796评论 0赞 7
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,805评论 0赞 4
  • 元宵佳节,本是冷门的广场因为灯会的到来,立刻变得热闹非凡起来,五彩缤纷的灯在广场中央,引游人驻目。
    起始之点阅读 274评论 0赞 0
  • 今天,王宝强离婚的事,成了热点。我们看到了许许多多关于这个事件的看法。 首先,一个演员的离婚事件,居然再一次掀起了...
    岑岑言阅读 423评论 0赞 1

友情链接更多精彩内容