再问汉字的处理

 所属目录:Java   |   类型:技术问答   |   时间:2007-05-21
 问题:

我要将一串中英文、数字、符号混合的字符串按照长度拆分成一个数组  
  长度信息我已经保存在dataset中了  
  我写的是这样  
     
  //定义拆分的字符串的数组  
  string[]   arraydata=new   string[dataset_xml.tables[len].rows.count];  
                           
  int   startpoint   =   0;  
      //拆分成数组  
      for   (int   i=0;i<dataset_xml.tables[len].rows.count;i++)  
      {  
          //拆分每个字段到数组  
          datarow_len   =   dataset_xml.tables[len].rows[i];  
          string   substring1   =   string1.substring(startpoint,convert.toint32(datarow_len["len"]));  
          startpoint   +=   convert.toint32(datarow_len["len"]);  
          //去掉首尾空格  
          arraydata[i]=substring1.trim();  
   
  这样的话,如果出现汉字会出现问题,但是我不知道该怎么修改  
   
  谢谢,谢谢  
   
  大哥们,帮忙啊  
 

· 网友精彩回答:

发表者:free000

i、a、m每个都占二个byte,和方一样,也就是说 i和方在编码上都是2个byte

发表者:zhilunchen

发两个函数给你,看对你有没有帮助!  
  //计算字符串的实际长度,一个汉字或全角字符算两个byte  
  public   static   int   getstringlength(string   param)  
  {  
  asciiencoding   n   =   new   asciiencoding();  
  byte[]   b   =   n.getbytes(param);  
  int   l   =   0;     //   l   为字符串之实际长度  
  for   (int   i=0;i   <=   b.length-1;i++)  
  {  
  if   (b[i]   ==63)     //判断是否为汉字或全脚符号  
  {  
  l++;  
  }  
  l++;  
  }  
  return   l;  
  }  
   
  //strlen:字符串的实际长度,len:要取的字符串长度,其中一个汉字或全角字符算两个byte  
  public   static   string   getsubstring(string   param,int   len,ref   int   strlen)  
  {  
  string   returnstr="";  
  bool   issub=false;  
  asciiencoding   n   =   new   asciiencoding();  
  byte[]   b   =   n.getbytes(param);  
  int   l   =   0;     //   l   为字符串之实际长度  
  for   (int   i=0;i   <=   b.length-1;i++)  
  {  
  if   (b[i]   ==63)     //判断是否为汉字或全脚符号  
  {  
  l++;  
  }  
  l++;  
  if((issub==false)&&((l==len)||((l+1)==len)))  
  {  
  returnstr=param.substring(0,i+1);  
  issub=true;  
  }  
  }  
   
  strlen=l;  
  if(returnstr=="")  
  {  
  returnstr=param;  
  }  
  return   returnstr;  
  }  
 

.
处理 SSI 文件时出错
© 2006-2008 All Rights Reserved