最近写了一个简单的方法,用于截取固定长度的字符串.
public string CutString(sting inStr,int length)
{
string outStr;
if ( inStr.Lenth > length )
{
outStr = inStr.SubString(0,length);
}
else
outStr = inStr;
return outStr;
}
问题在于中英文字符不一样,上述功能只能是取出固定个数的字符,但实际长度不一样.
而本人要实现的功能是要取相同长度的字符.
请问该如何处理?
如:
abcdefghij 十个英文字符
一二三四五 五个中文字符
另外,就是要避免取出半个中文字符!该如何做?
public string CutString(sting inStr,int length)
{
string outStr;
if ( inStr.Lenth > length )
{
outStr = inStr.SubString(0,length);
}
else
outStr = inStr;
return outStr;
}
问题在于中英文字符不一样,上述功能只能是取出固定个数的字符,但实际长度不一样.
而本人要实现的功能是要取相同长度的字符.
请问该如何处理?
如:
abcdefghij 十个英文字符
一二三四五 五个中文字符
另外,就是要避免取出半个中文字符!该如何做?
避免取到半个中文就是在要取的最后一位判断一下是否中文,如果是的话少取一个byte或者多取一个byte
public string CutString(sting inStr,int length)
{
Encoding d = Encoding.Default;
byte[] bs = d.GetBytes(inStr);
return d.GetString(bs, 0, length);
}
不必担心半个字符的问题,GetString方法会自动处理的
#region 截取定长汉字与英文
/// <summary>
/// 截取定长汉字与英文
/// </summary>
/// <param name="str">要截取的字符串</param>
/// <param name="strlen">截取长度</param>
/// <returns>返回定长的新字符串</returns>
public string sp(string str,int strlen)
{
string newstr="";
int t=0 ;
for(int i=1;i<str.Length;i++)
{
int c=(int)(str[i]);
if (c>255)
{
t=t+2 ;
}
else
{
t=t+1;
}
if (t>=strlen)
{
newstr=str.Substring(0,i)+".." ;
break;
}
else
{
newstr=str+" " ;
}
}
return newstr;
}
#endregion