我的一个公用方法,是用来截取文字标题的/// <summary>
/// 字符串截取
/// </summary>
/// <param name="str">需要截取的字符串</param>
/// <param name="strLen">截取长度</param>
/// <returns></returns>
public static string GetShortStr(string str, int strLen)
{
if (str.Length < strLen)//如果输入的字符串长度小于指定的长度
{
str = str.Substring(0, str.Length);//字符长度大于字符长度
}
else
{
str = str.Substring(0, strLen) + "...";
}
return str;
}设定了截取字符个数,在中文情况下没问题,在英文标题情况下,明显比中文短了很多。
比如截取6个字符:【新闻中心】
1.我是某某某的..
2.Member...
用正则如何修改?
/// 字符串截取
/// </summary>
/// <param name="str">需要截取的字符串</param>
/// <param name="strLen">截取长度</param>
/// <returns></returns>
public static string GetShortStr(string str, int strLen)
{
if (str.Length < strLen)//如果输入的字符串长度小于指定的长度
{
str = str.Substring(0, str.Length);//字符长度大于字符长度
}
else
{
str = str.Substring(0, strLen) + "...";
}
return str;
}设定了截取字符个数,在中文情况下没问题,在英文标题情况下,明显比中文短了很多。
比如截取6个字符:【新闻中心】
1.我是某某某的..
2.Member...
用正则如何修改?
{
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();
}