一、思路:

  1、汉字的字节不能截半,截半的话字节对于的ASCII码是小于0的值:byte[] bytes = str.getBytes(“gbk”)

  2、一个英文字母(不分大小写)占一个字节的空间,一个中文汉字占两个字节的空间

PS:

不同编码方式1个英文字母占的字节是不同的:
1,ASCII码:一个英文字母(不分大小写)占一个字节的空间,一个中文汉字占两个字节的空间。
2,UTF-8编码:一个英文字符等于一个字节,一个中文(含繁体)等于三个字节。中文标点占三个字节,英文标点占一个字节
3,Unicode编码:一个英文等于两个字节,一个中文(含繁体)等于两个字节。中文标点占两个字节,英文标点占两个字节

二、编程

import java.io.UnsupportedEncodingException;

public class StringNumber {

    public static void main(String[] args) {
        
        String str = "我ABC汉DEF";
        int num = 0;
        
        try {
            
            // 将中文以“gbk”的方式转换为字节数组。一个汉字对应两个字节。
              num = trimGBK(str.getBytes("GBK"),6);
            
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        // str.substring(0,num):截取0-num的值
        System.out.println(str.substring(0,num) );
    }
    
    public static int  trimGBK(byte[] buf,int n){
        
        int num = 0;
        boolean bChineseFirstHalf = false;
        
        for(int i=0;i<n;i++){
            // 判断是否截半,截半字节码的ASCII值为0
            if(buf[i]<0 && !bChineseFirstHalf){
                bChineseFirstHalf = true;
            }else{
                num++;
                bChineseFirstHalf = false;                
            }
        }
        return num;
    }
}

 

posted on 2020-05-11 17:41  小潘同学  阅读(276)  评论(0)    收藏  举报
-->