C#中如何获取一个字符串的实际字符数
2010-03-28 18:32
399 查看
在包含中文的字符串处理时,除了裁切固定长度的操作之外,有时也需要获取一个字符串的实际字符数,比如我们限制输入框字符数的时候。而C#提供的string.Length属性却无法满足我们的要求,由此,便有了下面这个方法:
在写上面那个方法时,我突然想到,如果把字符串转换成byte[]是不是也能获取到这个长度呢?姑且试试:
这个方法也能够让我们如愿取到字符串长度。但这两个方法孰优孰劣呢?我使用了一句110字符长度的中文进行500万次调用测试,事实说话:
GetLength 的执行效率几乎是 GetLength_Obsoleted 的 4 倍!
/// <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 倍!
相关文章推荐
- C#中如何获取一个字符串的实际字符数
- C#中如何获取一个字符串的实际字符数
- c#一个字符串中如何去掉相同的字符
- c#一个字符串中如何去掉相同的字符
- php面试题:如何知道一个未知长度的字符串哪个字符出现的次数最多?(字符串可由字母,数字及其他字符组成)请写出代码。
- c# 中如何获取xml文档中最后的一个节点的值
- 一个可序列化的C#对象,如何转成一个XML格式的文件或字符串
- c::如何左旋一个字符串中的k个字符~
- 在C#中如何获取字符串的真实的长度
- C# 如何识别一个字符串是否Json格式
- java中用正则表达式获取一个指定的子字符在字符串中出现的指定次数的下标索引,并且进行字符串分割
- JavaSE 之 如何将一个用逗号分隔的字符串转换成字符数组
- 如何获取含有中文字符的字符串长度
- 如何判断一个字符串中是否含有汉字或汉字标点(即双字节字符)
- 一个C#面试问题,要求是将字符串中重复字符从第二个开始都去掉,空格除外。然后显示的时候,从后往前显示。
- GDI+ 如何获取字符串实际的输出像素值(高度和宽度)
- 如何获取两个字符串中两个相同的字符
- C# 如何用多个字符来切分字符串并去除空格
- JS获取字符串长度,一个中文算两个字符。
- C# 3.0 Cookbook:一、字符与字符串处理(3):在一个字符串内寻找另一个字符串出现的所有位置