C高性能的截取字符串函数_第1页
C高性能的截取字符串函数_第2页
C高性能的截取字符串函数_第3页
C高性能的截取字符串函数_第4页
C高性能的截取字符串函数_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、去年的时候由于工作需要,写了个用C#截取指定长度的方法,当时颇费了一番周折,因为想错了方向。例如要截取字符串"我是1个中国人",取3位长度,那得到的结果是"我",如果取6位长度,得到的结果是"我是1",因为汉字是两个字节。当时的思路主要是考虑最后一位是单字节还是双字节,不过最终得出了比较不错的方法,只是这方法后来却找不到了,重新写一个又太懒,想或许到Google上能搜索到,但是可惜的是,搜索到的方法几乎都有问题,不单是效率,还有结果都不能正常显示,有的文章甚至被不少大网站互相转来转去,呀,没有人调试过吗?拿出时间来自己写一个,大家看代

2、码: public static string GetSubString(string str, int length) string temp = str; int j = 0; int k = 0; for (int i = 0; i < temp.Length; i+) if (Regex.IsMatch(temp.Substring(i, 1), "u4e00-u9fa5+") j += 2; else j += 1; if (j <= length) k += 1; if (j >= length) return temp.Substring(0

3、, k); return temp; 具体思路是,定义两个变量:j 与K,例如要截取字符串"我是1个中国人",取3位长度,从第一个字符开始判断temp.Substring(i, 1),如果是双字节j+2,否则加1,而变量K则每次循环加1,用来执行最后的截取操作。当j <= 要截取的字节数,变量K停止加1。当j >= 要截取的字节数,根据K返回截取后的结果。看到别人的方法,都是最先将整个字符串中的中文替换成双字节,然后判断总长度是否大于需要截取的长度,如果大于再执行截取,而这样无疑是低效的(如果需要截取的字符串有1万个字符,需要返回的是20个字符,同时返回20条记

4、录的话需要替换几十万次.),还要接下来再判断是该截取几位./*工作需要,要找一段截取定长混合的代码。*/ public static string GetSubString(string str, int length) string temp = str; int j = 0, k=0; CharEnumerator ce = str.GetEnumerator(); while (ce.MoveNext() j += (ce.Current > 0 && ce.Current < 255) ? 1 : 2 ; if (j <= length) k+; el

5、se temp = str.Substring(0, k); break; return temp; 你这个有问题,只能判断中文,应该判断所有双字节字符public static string GetStrLenAll(string s, int len, string style)string temp = s;if (Regex.Replace(temp, "x00-xff", "zz", RegexOptions.IgnoreCase).Length <= len)return temp;for (int i = temp.Length; i

6、 >= 0; i-)temp = temp.Substring(0, i);if (Regex.Replace(temp, "x00-xff", "zz", RegexOptions.IgnoreCase).Length <= len - style.Length)return temp + style;return ""C#截取字符串应用:用C#截取指定长度的中英文混合字符串我们常做的一件事情,就是在文章系统中,截取一定长度的文章标题,超过指定长度,就加“.”如两个字符串:1. string str1 

7、;= "中国人要啊abc呀"  2. string str2 = "1中国人23456abc呀" C#截取字符串程序输出:1. str1 = "中国人要."  2. str2 = "1中国人2." 即要把中英文混合的字符串,在截取后,长度要一致,即8个字节的长度(不包括三个点),而且不能出现中文被从中间截断的情况。于是写了个方法:1. public static string&

8、#160;getStr(string s,int l)  2.  3. string temp = s   4. if (Regex.Replace(temp,  5. "u4e00-u9fa5","zz",  6. RegexOptions.IgnoreCase).Length<=l)  7.  8. return temp;  9.  10. for (int

9、0;i=temp.Length;i>=0;i-)  11.  12. temp = temp.Substring(0,i);  13. if (Regex.Replace(temp,  14. "u4e00-u9fa5","zz",  15. RegexOptions.IgnoreCase).Length<=l-3)  16.  17. return temp + ""  18.  19.  20. return ""  21.  调用:1. string

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论