我要将一串中英文、数字、符号混合的字符串按照长度拆分成一个数组
长度信息我已经保存在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(); 这样的话,如果出现汉字会出现问题,但是我不知道该怎么修改谢谢,谢谢大哥们,帮忙啊

解决方案 »

  1.   

    不会有问题的吧,.net使用的是Unicode
      

  2.   

    Unicode中,ASC和汉字都占两个Byte
      

  3.   

    //取字符串长度
    s = "iam方方方";
    int len = s.Length;//will output as 6
    byte[] sarr = System.Text.Encoding.Default.GetBytes(s);
    len = sarr.Length;//will output as 3+3*2=9还是要根据不同内容的不同长度来处理
      

  4.   

    比如说我要截取s = "iam方方方"的第一个“方”字,也就是第4位和第5位,要怎么办呢
      

  5.   

    "iam方方方"
     012 3 4 5
    应该是这样的,所以应该是3
      

  6.   

    但是我的拆串是用字节计算长度的也就是
    "iam方方方"
    3   2  4   -----------按长度计算拆出来是  "iam" "方" "方方"
      

  7.   

    用char.GetUnicodeCategory(c) == UnicodeCategory.OtherLetter
    怎么都喜欢用占字节数阿,这个方法没法区别出英语外语言的符号和字符的
    \u03a0,这是pi的符号
      

  8.   

    发两个函数给你,看对你有没有帮助!
    //计算字符串的实际长度,一个汉字或全角字符算两个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;
    }