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

Posted 小潘同学

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不相关的知识,希望对你有一定的参考价值。

一、思路:

  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;
    }
}

 

以上是关于编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不的主要内容,如果未能解决你的问题,请参考以下文章

java算法面试题:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串,但要保证汉字不被截取半个, 如“我ABC”,4,应该截取“我AB”,输入“我ABC汉DEF”,6,应该

JAVA编写一个截取字符串的函数

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

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

截取字符串

截取字符串的代码实现