zoukankan      html  css  js  c++  java
  • 截取字节数组形式的字符串,串中包含中文

    描述

    1、首先说一下各种字符的字节组成:

    字符、字母和数字:由一个大于0的数字码组成,比如1--49、A--65、b--98。即这三种类型长度为1字节。

    汉字:由两个小于0的数字码组成,比如 “我”-- (-50,-46)、“们”--(-61,-57)。即中文长度为2字节。

    2、解释一下题干

    输入是一个包含中文的字符串str,和一个截取长度i,要求把str截取i个字符长度输出,但是如果末尾是半个中文,就舍弃掉。因为除了汉字以外的其他都是1字节长度,所以本题难度是处理中文的问题。

    代码

    public void A(String str, int i){
    		byte b[] = new byte[1024];
    		int num = 0;
    		b = str.getBytes();
    		if(b[i-1]>0){
    			System.out.println(new String(b, 0, i));
    		}else {
    			for(int j=0; j<i; j++){
    				if(b[j]<0){
    					num ++;
    					num = num % 2;
    				}else {
    					num = 0;
    				}
    			}
    			if(num == 0){
    				System.out.println(new String(b, 0, i));
    			}else {
    				System.out.println(new String(b, 0, i-1));
    			}
    		}
    	}
    

    主函数:

    public static void main(String[] args) {
    		String str = "哈哈1Ab我们的田野";
    		new testString().A(str, 10);
    		
    	}
    

    输出:

    哈哈1Ab我
    

    主函数中要求截取输出10字节,那么“哈哈1Ab我”的字节长度为 2+2+1+1+1+2 = 9,而后边是一个汉字,也就是第10字节只是半个汉字,所以舍弃掉。

  • 相关阅读:
    1269 匈牙利游戏 2012年CCC加拿大高中生信息学奥赛
    2577 医院设置
    2488 绿豆蛙的归宿
    3315 时空跳跃者的魔法
    1079 回家
    1365 浴火银河星际跳跃
    1074 食物链 2001年NOI全国竞赛
    2596 售货员的难题
    wetask.cn领度任务全新试用体验
    多线程--生产者消费者--简单例子
  • 原文地址:https://www.cnblogs.com/K-artorias/p/8006650.html
Copyright © 2011-2022 走看看