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

拿出时间来自己写一个,大家看代码:
 
用C#截取指定长度的中英文混合字符串的最终算法public static string GetSubString(string str, int length)

具体思路是,定义两个变量:j 与K,例如要截取字符串"我是1个中国人",取3位长度,从第一个字符开始判断——temp.Substring(i, 1),如果是双字节j+2,否则加1,而变量K则每次循环加1,用来执行最后的截取操作。
当j <= 要截取的字节数,变量K停止加1。
当j >= 要截取的字节数,根据K返回截取后的结果。

看到别人的方法,都是最先将整个字符串中的中文替换成双字节,然后判断总长度是否大于需要截取的长度,如果大于再执行截取,而这样无疑是低效的(如果需要截取的字符串有1万个字符,需要返回的是20个字符,同时返回20条记录的话需要替换几十万次....),还要接下来再判断是该截取几位.....

转自:http://www.cnblogs.com/asp600/archive/2006/10/16/530865.aspx

相关文章:

  • 2021-06-07
  • 2021-12-27
  • 2021-09-28
  • 2021-10-02
  • 2021-12-15
  • 2021-09-27
猜你喜欢
  • 2021-10-19
  • 2021-07-27
  • 2021-07-07
  • 2021-12-17
  • 2021-06-24
相关资源
相似解决方案