之前做網站裡模組的列表,最開始用的截取方法很簡單、用的string的length屬性。
判斷和定義的長度比較,超過則截取,並加上自訂尾碼"...",沒超過則完整顯示。
這樣的問題是中英文占字元不同而造成截取後長短不一。
後來想到的是通過css截取,給定width,並設定overflow:hidden。
這樣截取的比較齊整勒、可是一旦中英文字串的長度和定義width有一些誤差。
標題中的漢字很容易被切割只顯示左側一部分勒,顯示上也不夠,所以就想到改善最初的截取方法。
改自CSDN裡的一個文章。
代碼如下:
/// <summary><br /> /// 截取字串長度<br /> /// </summary><br /> /// <param name="input">要截取的字串對象</param><br /> /// <param name="length">要保留的字元個數</param><br /> /// <param name="suffix">尾碼(用以替換超出長度部分)</param><br /> /// <returns></returns><br /> public static string MySubString(string input, int length,string suffix)<br /> {<br /> Encoding encode = Encoding.GetEncoding("gb2312");<br /> byte[] byteArr = encode.GetBytes(input);<br /> if (byteArr.Length <= length) return input;</p><p> int m = 0, n = 0;<br /> foreach (byte b in byteArr)<br /> {<br /> if (n >= length) break;<br /> if (b > 127) m++; //重要一步:對前p個位元組中的值大於127的字元進行統計<br /> n++;<br /> }<br /> if (m % 2 != 0) n = length + 1; //如果非偶:則說明末尾為雙位元組字元,截取位元加1</p><p> return encode.GetString(byteArr, 0, n)+suffix;<br /> } </p><p>
本文來自CSDN部落格,轉載請標明出處:http://blog.csdn.net/nextuntil/archive/2010/06/06/5650182.aspx