按照指定字符集以及字节数截取字符串

文章提供两个Java方法,分别用于按照指定字节数截取UTF-8和GBK编码的字符串。通过检查字节序来确定中文字符的位置,从而正确地进行字符串截取。

首先看下数据库字符集:

select lengthb(“丁”) from dual 为3则为utf-8 为2则为gbk。


package bytes;

import java.io.UnsupportedEncodingException;

public class BytesUTFAndGBK {

    /**

    * 按照指定字节数截取utf-8字符串

    * @param str

    * @param num

    * @return

    * @throws UnsupportedEncodingException

    */

    public String cutUTF(String str,int num) throws UnsupportedEncodingException {

        String result = null;

        int count = 0;

        byte[] buf = str.getBytes("utf-8");

        for (int i = num-1;i > =0;i--){

            if (buf[i] < 0){

                count++;

            }else{

                break;

            }

        }

        if (count % 3 == 0){//utf-8中文占3个字节

            result = new String(buf,0,num,"utf-8");

        }else if (count % 3 == 1){

            result = new String(buf,0,num-1,"utf-8");

        }else{

            result = new String(buf,0,num-2,"utf-8");

        }

        return result;

    }

    /**

    * 按照指定字节数截取GBK字符串

    * @param str

    * @param num

    * @return

    * @throws UnsupportedEncodingException

    */

    public String cutGBK(String str,int num) throws UnsupportedEncodingException {

        String result = null;

        int count = 0;

        byte[] buf = str.getBytes("GBK");

        for (int i = num-1;i > =0;i--){

            if (buf[i] < 0){

                count++;

            }else{

                break;

            }

        }

        if (count % 2 == 0){//GBK中文占2个字节

            result = new String(buf,0,num,"utf-8");

        }else{

            result = new String(buf,0,num-1,"GBK");

        }

        return result;

    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值