关于字符串截取

字符串截取相信大家都不陌生。但是在同一个字符串中我们需要截取不同的数据,比如将text文本中的数据转换成表格的时候

这些数据中可能包含中文等。

这个时候如果你用string.Length()你会发现等长度的字符串中只要中文的数量不同,获取的字符串长度就会不同。

一下是代码:

        /// <summary>
        /// 截取字符串
        /// </summary>
        /// <param name="strline">被截取的字符串</param>
        /// <param name="dt">填充的表</param>
        /// <param name="weight">截取的長度</param>
        private void getDataToDataTable(string strline,DataTable dt,int[] weight)
        {

            DataRow dr=dt.NewRow();
            int sum=0;
            int count = 0;
            ArrayList num = new ArrayList();
            char[] temp = strline.ToCharArray();
            for (int i = 0; i < temp.Length; i++)
            {
                if (((int)temp[i])>255) //大于255的都是汉字或者特殊字符 
                {
                    num.Add(i);
                }
            }
            for (int i = 0; i < dt.Columns.Count; i++)
	  {
          count = 0;
          for (int y = 0; y < num.Count; y++)
          {
            if (Convert.ToInt32(num[y])>=sum&&Convert.ToInt32(num[y])<=sum+weight[i])
                    {
                        count++;
                    }
          }
          dr[i]=strline.Substring(sum,weight[i]-count);
          sum+=weight[i]-count;
	  }
        }

 这样就排除了中文字符占位的问题。

在计算整体长度时,中文字符是占了两个字符的位置,但是在获取字符串长度时(string.length)中文字符只计算一个字符长度,这样就产生了位置偏差。

在截取的过程中,我们先找到所截取下来的字符串中所包含的中文字符。这样就知道减少截取的长度。

作者:不再奢望
出处:http://www.cnblogs.com/mgxiaobo/
本文版权归作者和博客园共同拥有,欢迎转载,但未经作者同意必须保留此段声明,且在页面明显位置给出原文链接,否则保留追究法律责任的权利。

原文地址:https://www.cnblogs.com/mgxiaobo/p/4681979.html