通用方法:
此方法是采用unicode编码方式,一个汉字为2个字节,一个数字or字母是1个字节,此方法传入的第二个长度参数是unicode长度。
所以不用考虑截取的字符串是汉字还是英文字母的问题,参数length 可以理解为应该显示的宽度即可。
1 public string GetFirstString(string stringToSub, int length) 2 { 3 Regex regex = new Regex(@"[u4e00-u9fa5]+", RegexOptions.Compiled); 4 char[] stringChar = stringToSub.ToCharArray(); 5 StringBuilder sb = new StringBuilder(); 6 int nLength = 0; 7 for (int i = 0; i < stringChar.Length; i++) 8 { 9 if (regex.IsMatch((stringChar[i]).ToString())) 10 { 11 nLength += 2; 12 } 13 else 14 { 15 nLength = nLength + 1; 16 } 17 18 if (nLength <= length) 19 { 20 sb.Append(stringChar[i]); 21 } 22 else 23 { 24 break; 25 } 26 } 27 if (sb.ToString() != stringToSub) 28 { 29 sb.Append("..."); 30 } 31 return sb.ToString(); 32 }
调用方法:
string NewStr = GetFirstString(OldStr, 25);//第一个参数原字符串,第二个参数截断的长度