截取指定长度的字符串(汉字不出现半个)

来源:互联网 发布:智慧城市四大数据库 编辑:程序博客网 时间:2024/06/08 08:58
/** * 定义一个方法,按照指定的长度截取字符. * 如:对于"ab你好",如果取三个字节,那么子串应该只显示"ab",半个汉字舍去. * 如果是四个字节就显示"ab你",截取5个字节还是"ab你". *  * 汉字在GBK编码中是2个字节,字节数组转换成十进制都是负数, * 汉字在UTF-8中是3个字节,每个字节转换成十进制也是负数. */import java.io.IOException;public class GetStringByByte{    public static void main(String[] args) throws IOException    {        String str = "f过好的sd喆dd";        for (int len = 0; len < str.getBytes("gbk").length; len++)        {            System.out.println("截取" + (len + 1) + "个字节的结果是:" + getStringByByte(str, len + 1));        }    }    /**     * 1.先把字符串转换成字节数组(注意字符集"gbk")     * 2.根据要截取的长度,从index=len-1开始,倒序编列数组     * 3.判断每个字节十进制的值     * 4.如果<0,则计数器+1; 循环直到>0     * 5.判断计数器为偶数,则直接截取(0,len)字符串     * 6.若果计数器为奇数,则截取(0,len-1)字符串     *      * @param str 要截取的字符串     * @param len 要截取的长度     * @return 截取后的字符串     * @throws IOException     */    private static String getStringByByte(String str, int len) throws IOException    {        byte[] b = str.getBytes("gbk");        int count = 0;        for (int i = len - 1; i >= 0; i--)        {            if (b[i] < 0)                count++;            else                break;        }        if (count % 2 == 0)            return new String(b, 0, len, "gbk");        else            return new String(b, 0, len - 1, "gbk");    }}


 

0 0