您的位置:首页 > 编程语言 > C#

C#中如何获取一个字符串的实际字符数

2010-11-25 15:37 253 查看
在包含中文的字符串处理时,除了裁切固定长度的操作之外,有时也需要获取一个字符串的实际字符数,比如我们限制输入框字符数的时候。而C#提供的string.Length属性却无法满足我们的要求,由此,便有了下面这个方法:

/// <summary>
/// 获取字符串长度。与string.Length不同的是,该方法将中文作 2 个字符计算。
/// </summary>
/// <param name="str">目标字符串</param>
/// <returns></returns>
public static int GetLength(string str)
{
if (str == null || str.Length == 0) { return 0; }

int l = str.Length;
int realLen = l;

#region 计算长度
int clen = 0;//当前长度
while (clen < l)
{
//每遇到一个中文,则将实际长度加一。
if ((int)str[clen] > 128) { realLen++; }
clen++;
}
#endregion

return realLen;
}



在写上面那个方法时,我突然想到,如果把字符串转换成byte[]是不是也能获取到这个长度呢?姑且试试:

public static int GetLength_Obsoleted(string str)
{
if (str == null || str.Length == 0) { return 0; }
byte[] data = Encoding.Default.GetBytes(str);
return data.Length;
}

这个方法也能够让我们如愿取到字符串长度。但这两个方法孰优孰劣呢?我使用了一句110字符长度的中文进行500万次调用测试,GetLength 的执行效率几乎是 GetLength_Obsoleted 的 4 倍!
转载文章,仅供本人使用方便。转载地址:http://udnz.com/Article/CutStr.aspx

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c# string byte null 测试
相关文章推荐