C#中如何获取一个字符串的实际字符数
2010-03-28 18:32 uonun 阅读(2982) 评论(0) 编辑 收藏 举报在包含中文的字符串处理时,除了裁切固定长度的操作之外,有时也需要获取一个字符串的实际字符数,比如我们限制输入框字符数的时候。而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 倍!