博客园  :: 首页  :: 联系 :: 订阅 订阅  :: 管理

几种常见的字符串长度截取显示方法

Posted on 2009-03-03 12:38  ╁蓝驿┲→  阅读(270)  评论(0编辑  收藏  举报

有从网上找的和自己在用的方法:

1.CSS法<个人认为几种中比较好的方法,可以减少后台程序服务>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
 <HEAD>
  <style>
  .p_Name { PADDING-LEFT: 0px; OVERFLOW: hidden; WIDTH: 90px; WORD-BREAK: break-all; HEIGHT: 40px }
  </style>
 </HEAD>

 <BODY>
 <div class="p_Name">sssssssssssssssssssssssssssss<br>ssssssssssssssssssssssssssssssssssssss</div>
 </BODY>
</HTML>
2.使用正则区分中英文进行双字节符计算 不错
public static string GetFirstString(string stringToSub, int length) 
        {
            Regex regex = new Regex("[\u4e00-\u9fa5]+", RegexOptions.Compiled);
            char[] stringChar = stringToSub.ToCharArray();
            StringBuilder sb = new StringBuilder();
            int nLength = 0;
            bool isCut=false;
            for(int i = 0; i < stringChar.Length; i++) 
            {
                if (regex.IsMatch((stringChar[i]).ToString())) 
                {
                    sb.Append(stringChar[i]);
                    nLength += 2;
                }
                else 
                {
                    sb.Append(stringChar[i]);
                    nLength = nLength + 1;
                }

                if (nLength > length)
                {
                    isCut=true;
                    break;
                }
            }
            if(isCut)
                return sb.ToString()+"..";
            else
                return sb.ToString();
        }
3.编码字节
public string GetLimitedStr(string aSrcStr,int aLimitedNum)
        {
            if (aLimitedNum<=0) return aSrcStr;
            //String TmpStr=RemoveHTMLStr(aSrcStr);
            String TmpStr=aSrcStr;
            byte[] TmpStrBytes = System.Text.Encoding.GetEncoding("GB2312").GetBytes(TmpStr);
            if(TmpStrBytes.Length<=aLimitedNum)
                return aSrcStr;
            else
            {
                byte[] LStrBytes=null;
                int NeedStrNum=0;
                if (TmpStrBytes[aLimitedNum]>127)
                {
                    LStrBytes=new byte[aLimitedNum+1];
                    NeedStrNum=aLimitedNum+1;
                }
                else
                {
                    LStrBytes=new byte[aLimitedNum];
                    NeedStrNum=aLimitedNum;
                }
                Array.Copy(TmpStrBytes,LStrBytes,NeedStrNum);
                return System.Text.Encoding.GetEncoding("GB2312").GetString(LStrBytes);
            }
        }

4.其它网上流传

public static string SubComment(string original, int width)
        {
            int len = original.Length;
            if (len < width)
                return original;
            int clen = 0;//当前长度 
            int cwidth = 0;//当前宽度
            while (clen < len && cwidth < width)
            {
                if ((int) original[clen] > 128)
                    cwidth++;
                clen++;
                cwidth++;
            }
            return original.Substring(0, clen);
        }