一串字符串(有中文、数字、标点符号等)不知道总长度,要以每63个字节为单位截取并组成数组,且中文不被截成两半",谢谢各位前辈了~~!!!急~~~!!!
                                                                                                                         天高云淡

解决方案 »

  1.   

    mission impossible!
    每63个字节为单位,且中文不被截成两半。如果全是中文,那岂不是必然切出半个汉字了!
      

  2.   

    那就在第63个字节处判断好了先读0到63个字节放到 字节数组中byte b[]=null;
    s.getBytes(0, 63, b, 0);
    中国汉字的编码   16位的高8位肯定是大于   127的,用以区别英文标准的ASCII  
      所以你只需判断当前字符是否>127,如果大于127,那么就再读一个字节凑成汉字就可以了   
      

  3.   

    //判断字符是否为中文
    String str = "sdfh断sdfg该字符是hjt否为中文hjr";
    int count = 0; // 计数
    for(int i=0;i<str.length();i++){
        if(str.substring(i, i+1).matches("[\u4e00-\u9fa5]")){ // 当前是汉字
             count += 2;
            System.out.println(str.subSequence(i, i+1)+"为汉字。");
        }else{  // 不是汉字
             count += 1;
            System.out.println(str.substring(i, i+1)+"不为汉字");
        }
       // 判断计数值决定何时截断和具体截断位置
       ... ... 
    }
      

  4.   

     答:急~~~!!! [/color你急。我们大家也急。你说清楚些:62个字节(少一些行不行?)若:必须保证就是63字节且汉字不许分一半,则:我认为:无法解决(急了没用)。若:[color=#FF0000]允许少一个(或多一个),则问题十分容易解决。,就是这么个事。
      

  5.   

    美女发照片看看。
    截中文很简单,根据unicode判断,如果是ascii,index++,其他字符index+2好了。
      

  6.   

    给你点思路:
    (个人意见仅供参考)
    一个截取方法a
    一个计数方法b
    一个判断方法c
    一个特殊处理方法d//方法用途:循环截取字符并赋值给新数组 
    a {
        // 方法用途:判断某一字符是否汉字
        c { 
            //方法用途:根据判断结果计数byte..(实现你的63byte一截)
            b{}
            //方法用途:根据c的判断处理 汉字问题..
            d{}
          }
    }
      

  7.   

    答:没有生气啊。问题描述得越清楚,大家少走弯路啊。代码供你参考吧。import java.util.*;
    public class SplitString { //将字符串s按63字节分割。若正好是汉字的一半,则是62字节。
    //返回:所有这些byte[]所组成的一个ArrayList。
    // 用法:al.get(0)是第一个byte[]
    //al.get(1)是第二个byte[]
    //最后一个是:al.get(al.size()-1);是最后一个byte[]
    public static ArrayList<byte[]> toBytes(String s)
    {
    ArrayList<byte[]> al=new ArrayList<byte[]>();
    byte[] b=s.getBytes();//将串转成字节数组。按GBK编码。
    int start=0,end=start+63-1;//从start到end共63个字节
    while( end < b.length )//还有数据时
    {
    if( (char)(b[end]) >= (char)160 )//正好是半个汉字
    {
    end--;//将这半个汉字留到下一次。向前移一个字节,即:62个字节
    }
    byte[] data=new byte[end-start+1];//形成本次的字节数组(63或62)
    System.arraycopy(b, start, data, 0, data.length);//将字节复制过来
    al.add(data);//放入ArrayList中
    start=end+1;//下一个63字节块的起点
    end=start+63-1;//下一个63字节块的终点。共63字节。
    }//while

    if( start<b.length)//处理最后剩余的不足63字节的数据
    {
    end=b.length-1;//最后一个字节位置
    byte[] data=new byte[end-start+1];//形成本次的字节数组(63或62)
    System.arraycopy(b, start, data, 0, data.length);//将字节复制过来
    al.add(data);//放入ArrayList中
    }

    return al;
    }

    //测试
    public static void main(String[] args) {
    String s="aa啊阿";
    ArrayList<byte[]> al=null;
    al=toBytes(s);
    for(byte[] b:al)
    {
    for(byte b1:b)
    {
    System.out.print((b1&0x000000ff)+" ");
    }
    System.out.println("");
    } }}
      

  8.   

    如果是短信息,sp业务中一般为70个字符,msg.length()<= 70,干嘛一定要63个字符
      

  9.   

    输入为一个字符串和字节数,输出为按字节截取的字符串http://blog.csdn.net/yuzhu2008/archive/2008/05/14/2446860.aspx