按字节数拆分字符串

        按字符数拆分字符串很简单,我这里要做的是按照字节数拆分字符串。按照我这里的编码,一个汉字占2个字节,一个字母、数字、空格等是占一个字节。拆分的原理就是,先计算出这段字符串总共占多少字节,然后再一段一段的截取。在截取某一段时,若是这一段的字节不够,就往后再截取。

        1、下面这个函数是别人的,用来计算一段字符串占多少字节的。不管是汉字、字母、数字、空格、下划线等任何字符,只要在输入这段字符串时,某个字符是占多少字节,计算出来也是占多少字节。

//获取字符串的字节数
	public static int getWordCount(String s)
    {
        s = s.replaceAll("[^\\x00-\\xff]", "**");
        int length = s.length();
        return length;
    }

         2、下面这一段代码则是将某段字符串按照指定的字节数拆分成一个字符串数组。比如说数组里面每一项都是60个字节(若是已经有59个字节了,而接下来的字符是一个占两个字节的字符,如汉字,则不截取,那么这一个数组项只有59个字节)。

/**
     * 按字节数将string拆分
     * author:陈同兵
     * @param strContent
     * @param maxLength 这是每个字符串的字节数
     * @return
     */
    public static String[] split1(String strContent,int maxLength){
    	if(org.apache.commons.lang.StringUtils.isBlank(strContent))return new String[]{};        
    	if(maxLength<=0) return new String[]{strContent};
    	char[] xxxx = strContent.toCharArray();
    	int strlen=xxxx.length;//字符长度
    	int startIndex = 0,endIndex = 0;//字符数组的截取下标
    	java.util.List<String> list2 = new java.util.ArrayList();//用来存储截取后的字符串
    	char[] ch = null;
    	int b = 0;
    	for(int i = 0;i< strlen;){
    		//先按指定字节数截取一段字符,并转为串
    		endIndex = startIndex + maxLength/2;
    		ch = org.apache.commons.lang.ArrayUtils.subarray(xxxx, startIndex, endIndex);
    		//计算这段字符串的字节数
			b = getWordCount(String.valueOf(ch));
			//若它的字节数还不到指定的字节数,则进入while(){}里面继续往后截取
    		while((maxLength - b)>1){
    			endIndex = endIndex + (maxLength - b)/2;
    			if(endIndex >= strlen){
    				endIndex = strlen;
    				break;
    			}
    			ch = org.apache.commons.lang.ArrayUtils.subarray(xxxx, startIndex, endIndex);
    			b = getWordCount(String.valueOf(ch));
    		}
    		//在while里面得到合理的截取下标后,则进行截取,并放入list2里面去。
    		ch = org.apache.commons.lang.ArrayUtils.subarray(xxxx, startIndex, endIndex);
//    		System.out.println("被截取的字符串为=="+String.valueOf(ch));
    		list2.add(String.valueOf(ch));
    		startIndex = endIndex + 1;
    		i = startIndex;
    		if(endIndex >= strlen){
    			System.out.println("is over");
				break;
			}
    	}
    	
    	return (String[]) list2.toArray(new String[list2.size()]);
    }

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值