您的位置:首页 > 其它

长字符串的剪裁(后台方式)

2010-12-02 15:44 253 查看
考虑到有许多浏览器不兼容CSS,text-overflow的方式剪裁字符串加上“...”,网上也有提供全兼容的解决办法,但怎么样都没有后台处理字符串的方式来的直接。

下面我就给出后台处理的代码:

/// <summary>
/// 提供字符串操作
/// </summary>
public static class StringHelper
{
/// <summary>
/// 按照指定的长度剪裁字符串
/// </summary>
/// <param name="originalString">原始字符串</param>
/// <param name="length">剪裁长度</param>
/// <returns>剪裁后的字符串</returns>
public static string CropString(string originalString, int length)
{
if (length < originalString.Length)
{
return originalString.Substring(0, length) + "...";
}
else return originalString;
}
/// <summary>
/// 按照指定的长度可区分中英文剪裁字符串
/// </summary>
/// <param name="originalString">原始字符串</param>
/// <param name="length">剪裁长度</param>
/// <param name="isSeparate">是否区分中英文</param>
/// <returns>剪裁后的字符串</returns>
public static string CropString(string originalString, int length, bool isSeparate)
{
if (!isSeparate)
{
return CropString(originalString, length);
}
else
{
int len = length;
for (int i = 0; i < (length > originalString.Length ? originalString.Length : length); i++)
{
Regex rx = new Regex("^[\u4e00-\u9fa5]$");
if (!rx.IsMatch(originalString[i].ToString()))
{
len++;
}
}
return CropString(originalString, len);
}
}
}


之所以重载一下区分中英文,是因为中英文字符,即使长度相同,但显示的宽度并不一样,一般中文字符的宽度是一个英文字符的两倍左右,非等宽字体除外。

如果区分了中英文,那么显示的长字符串宽度基本上差不多。

逻辑:

遍历整个字符串;

提取每个字符,判断是否是中文字符;

如果不是,则将截取的长度加1,否则继续遍历;

循环结束,按照新的长度裁剪字符串;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: