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