


下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、关于C#字符串截取的研究对于网站程序员,一定会碰到字符串长度截取这个常用功能,一般如果用SubString即可解决。但是当遇到中英文混合,或者单字节双字节的混合时,此方法总感觉有点不如意。例如:abcdefghijkl字符串。当截取7个字符时。则为:abcdefg当存在 abc啊哦哦defg 字符串,再截取7个字符时。则为:abc啊哦哦d从以上我们显然可以看到。两个字符串的长度虽然都为7。但是第二个字符的长度明显要比第一长。这个是为什么呢?因为第一个截取的字符串,按字节数来算长度是7。而第二字符串的字节数其实是10。这样我们在网页设计时就会遇到页面变形。在设计网站时一般我们对于一个框架,其宽度
2、一般都是固定。而当所截取的字符串超过指定长度时,就容易把原先的框架撑开,或者换行。这样的结果不是我们预先想要设计的。那么我们应该如何来操作呢,答案其实已经公布了。那就是按照字符串的字节数来截取我们所需要的长度。问题找到了,我们来进一步分析具体需要的操作。此处提供2个方法:方法一:每次截取一个字符,然后进行判断截取的总的字符串的长度是否满足需要截取的字节数。该方法的特点就是程序代码简单方便,但是效率不是很高。比如要执行一个10000字节截取的操作,最好的结果就是循环检测5000次。当然最坏的结果就得循环检查10000次,这样的操作或许在实际应用中不太常见,但此方法本人觉得应该有改进之处。于是产生
3、第二个操作方法。方法二:1、 当字符串全部为单字节字符时,则可以用SubString方法截取指定长度即可。2、 当字符串全部为双字节字符时,则只需要用SubString方法截取指定长度的一半3、 当字符串为单字节双字节混合时,则我们可以用折中这样的方法来处理。例如我们有一个长度为350字节的字符串。而我们需要截取100个字节,则我们进行如下操作:先用SubString 方式取得100/2个字符。然后获取这50个字符的字节数。当50个字符=100个字节时,则直接返回结果。如果还不到100个字节,则继续用SubString方法截取 (100-(50个字符的字节数)/2 的字符。如此循环直到剩下的字
4、节数为1 或者0的时候,则停止。当剩余一个字节时,再进行判断下一个字符是否是单字节字符,如果是单字节,则把这个字符一起做为结果返回。如果双字节字符,则将下一个字符放弃,直接返回已经截取的字符串的长度。用此方法为指数形式截取,一般截取长字符串时只需进行几步操作即可。比如截取10000个字符,则进行最多12+1次操作即可附操作代码/ <summary> / 是否中文 / </summary> / <param name="chars"></param> / <param name="RegType">
5、;true:包含中文;false:全部为中文</param> / <returns></returns> public static bool IsChinese(string chars, bool RegType) if (RegType) return Regex.IsMatch(chars, "(u4e00-u9fa5|uff01-uff60|u3000)1,$"); return Regex.IsMatch(chars, "(u4e00-u9fa5|uff01-uff60|u3000)1,"); / <
6、summary> / 字符串截取(按字节) / </summary> / <param name="s"></param> / <param name="length"></param> / <returns></returns> public static string bSubstring(string s, int length) string str = "" if (Encoding.GetEncoding("GB2312&q
7、uot;).GetBytes(s).Length < length) return s; if (!IsChinese(s, false) return s.Substring(0, length); if (IsChinese(s, true) return s.Substring(0, length / 2); int num = length / 2; int num2 = length; while (true) str = str + s.Substring(str.Length, num); num2 = length - Encoding.GetEncoding("
8、;GB2312").GetBytes(str).Length; if (num2 <= 1) if (num2 = 1) && (Encoding.GetEncoding("GB2312").GetBytes(s.Substring(str.Length, 1).Length = 1) str = str + s.Substring(str.Length, 1); return str; num = num2 / 2; / <summary> / 截取指定长度的字节数,并在末尾加上指定字符,比如 “.” / </summary> / <param name="s"></param> / <param name="length"></param> / <param name="p_TailString"></param> / <returns></returns> public static string bSubstring(string s, int length, string p_TailString) string str
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 天津2025年天津市教育委员会教育综合服务中心招聘笔试历年参考题库附带答案详解-1
- 天津2025年天津华北地质勘查局核工业二四七大队招聘8人笔试历年参考题库附带答案详解-1
- 大理云南大理永平县思源实验学校公益性岗位招聘笔试历年参考题库附带答案详解
- 社交媒体中的网络安全与防护策略探讨
- 电商平台安全与风险控制全解析
- 电力公司个人年度总结
- 社区中医药健康教育提升居民健康素养
- 学校组织部工作计划范文
- 环境影响评价与可持续发展理论与实践研究进展
- 开发工程技术人员转正工作总结
- 新版统编版一年级道德与法治下册全册教案(完整版)教学设计含教学反思
- 城市开放空间-课件
- 2025年春季学期学校德育工作计划安排表(完整版)
- 湖南2024年湖南省水利厅所属事业单位招聘57人笔试历年参考题库附带答案详解
- 2024年加氢站技术规范
- 《幼儿教育政策与法规》教案-单元4 幼儿园的保育和教育
- 小学思政培训
- 《森林火灾预防与扑救技术课件教程》
- 2025年度会计人员继续教育会计法律法规答题活动测试100题答案
- 第15课 人机对话的实现 说课稿 六上信息科技浙教版(2023)001
- 电气化基本知识-岗培教材编写86课件讲解
评论
0/150
提交评论