今天有个程序需要在一个固定表格中输出一些文字数据,由于表格的单元格是固定的,因此用户希望能够在单元个中按照指定的宽度输出数据,超过的字符在下一行紧接着输出。我想这个在其他好多地方都会有应用的场景的。
由于C#.Net中String.Length获得的是字符数,SubString方法指定截取的起始位置也是指的Unicode字符数,但是我们这里需要输出的宽度用英文字符个数来指定,也就是说如果是英文那么就单元格中应该有10字符,如果是中文则应该有5个汉字。考虑到中文是不能将两个字符截断,如果前面有9个英文字符,后面紧接着是个中文的话,我们就只能将中文放在下一个子串中。
一、通常使用的字符串截取方法
常用的直接用SubString取子串方法得到的效果。
二、我的字符串截取方法
/**/
/// <summary>
/// 获取拆分后的字符串列表。
/// </summary>
/// <param name="mOrigianlString"></param>
/// <param name="subStringCharNumber"></param>
/// <returns></returns>
private
ArrayList GetSeparateSubString(
string
mOrigianlString,
int
subStringCharNumber)
{
ArrayList resultList = new ArrayList();
string tempStr = mOrigianlString;
int charNumber = subStringCharNumber;
int totalCount = 0;
string mSubStr = "";
for (int i = 0; i < tempStr.Length; i++)
{
string mChar = tempStr.Substring(i, 1);
int byteCount = Encoding.Default.GetByteCount(mChar);//关键点判断字符所占的字节数
if (byteCount == 1)
{
totalCount++;
mSubStr += mChar;
if (totalCount == charNumber || i == tempStr.Length - 1)
{
resultList.Add(mSubStr);
totalCount = 0;
mSubStr = "";
}
}
else if (byteCount > 1)
{
totalCount += 2;
if (totalCount > charNumber )
{
resultList.Add(mSubStr);
if (i == tempStr.Length - 1)
{
mSubStr = mChar;
resultList.Add(mSubStr);
}
else
{
totalCount = 2;
mSubStr = mChar;
}
}
else if (totalCount == charNumber)
{
mSubStr += mChar;
resultList.Add(mSubStr);
totalCount = 0;
mSubStr = "";
}
else if (i == tempStr.Length - 1)
{
mSubStr += mChar;
resultList.Add(mSubStr);
}
else
{
mSubStr += mChar;
}
}
}
return resultList;
}
573

被折叠的 条评论
为什么被折叠?



