截取字符串方法总结(区分汉字、数字、字母)

         在新闻文章项目里经常会碰到在前台显示标题列表,因为前台界面都是固定好了的,所以在显示时必须限制标题显示字符数量,超过这个数字的字符将被截去,以“...”之类的代替。
         截取字符串我们一般最常用也最简单的就是用string的Substring方法,这种方法在取值时汉字字母是不区分的,而因为汉字跟字母在显示时宽度有很大区别,所以截取后相同长度字符时有字母数字跟不带字母数字的字符串显示上回有很大区别,从而影响整个排版,比如下面的字符串:
          繁时不可慌,闲时不可荒
          fsbkh,xsbkh
同为相同字符数,显示时就极不对称了。
       
        另外一种方法就是,把字符串转化为bytes,在计算字符串的byte数时一个汉字按两个byte处理的,所以在截取字符时就避免了汉字字母显示时的不对称,以下自己写的一个标题字符串截取函数:
截取字符串长度
    上面这个方法也很简单,但是还有个问题,就是如果我要处理的字符串是“520字符串截取”,按上面的方法,它的GetBytes.Length应该等于13,如果我要截取的长度len=10的话,那么它截取后的字符串就成了“520字符串?”因为sarr(9)即第十个byte的值其实是表示"截"字的两个byte中的一个,这样就会出现文字显示错误。

    看到另外一种方法,先用asc()得到字符的ascii码,如果asc()<0就是汉字,这时长度就算2,否子算一个字符长度,这种方法就避免了上面的截取字符串造成字符丢失的情况:
Code

        综合以上一些方法,自己写了个针对处理字符串的函数:超过规定长度时即截取,省略的字符做参数添加,比如想在省略的字符处显示"……"或"..."或"--"都可以,免去了每个显示都要去重写一次方法的烦琐:
        
Code

posted on 2008-03-24 10:31  Theo  阅读(2797)  评论(2编辑  收藏  举报