美文网首页
在指定编码环境下,按给定字节数截取字符串问题

在指定编码环境下,按给定字节数截取字符串问题

作者: 鉴闻俗说 | 来源:发表于2018-04-19 11:26 被阅读0次

    1、题目描述

    在GBK编码环境下,编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。但是要保证汉字不被截半个,如"我ABC"4,应该截为"我AB",输入"我ABC汉DEF",6,应该输出为"我ABC"而不是"我ABC+汉的半个"。

    2、解决代码

     public static String subString(String str, int splitByteNum) throws UnsupportedEncodingException
            {
                //输入无效判断
                if (null == str || "".equals(str) || splitByteNum <= 0)
                {
                    return "";
                }
    
                int tempSubStrLength = splitByteNum;
                //截取长度为要截取字节数的子串。说明str.length()字符串中字符个数一定小于等于字节数。
                String subStr = str.substring(0, tempSubStrLength > str.length() ? str.length() : tempSubStrLength);
                //在GBK编码下,得到子串的字节长度
                int subStrByteNum = subStr.getBytes("GBK").length;
                
                //如果子串的字节长度大于字符长度,说明一定有汉字
                while (subStrByteNum > tempSubStrLength)
                {
                    /**
                     * 在子串末尾去掉一个字符,重新计算子串在GBK下的字节长度。
                     * 因为是去掉一个字符,而汉字占一个字符,所以不用考虑半个汉字的问题
                     */
                    int subStrLength = --splitByteNum;
                    subStr = str.substring(0, tempSubStrLength > str.length() ? str.length() : subStrLength);
                    subStrByteNum = subStr.getBytes("GBK").length;
                }
    
                return subStr;
            }
    

    参考文章:http://songjianyong.iteye.com/blog/1399241

    相关文章

      网友评论

          本文标题:在指定编码环境下,按给定字节数截取字符串问题

          本文链接:https://www.haomeiwen.com/subject/bjtwkftx.html