下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度车库停车场保险合同
- 04版保温材料专利许可使用合同
- 2024年度智能物流系统开发合同:物流公司与软件开发商
- 2024年度曹瑞与曹氏公司商标转让合同
- 2024版企业会议系统部署与维护合同
- 2024年度股权转让合同中的优先购买权
- 二零二四年度临时司机就业介绍所合同
- 2024年度供应链管理合同:涉及原材料采购与产品分销合作
- 二零二四年度企业咨询服务合同服务内容扩展
- 2024年度电影票房分成及结算合同
- 湖北省武汉市汉阳区2024-2025学年九年级上学期期中语文卷
- 中华人民共和国能源法
- 2024-2030年中国冷库及冷风机行业竞争趋势及未来发展策略分析报告
- 华为近三年财务分析报告范文
- 《义务教育数学课程标准(2022年版)》初中内容解读
- 2024浙江省执业药师继续教育答案-中医虚症辨证用药
- 2024年第九届学宪法、讲宪法题库(含答案)
- 2024年广东省公务员录用考试《行测》试题及答案解析
- 浙江省杭州市2025届高三上学期一模英语试题 含答案
- 2025届高三化学一轮复习 原电池 化学电源(第一课时)课件
- 2024-2030年全球学前教育行业经营规模研究与投资模式分析研究报告
评论
0/150
提交评论