标签:
字符串截取相信大家都不陌生。但是在同一个字符串中我们需要截取不同的数据,比如将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/p/4681979.html