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

考虑到有许多浏览器不兼容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. 遍历整个字符串;
  2. 提取每个字符,判断是否是中文字符;
  3. 如果不是,则将截取的长度加1,否则继续遍历;
  4. 循环结束,按照新的长度裁剪字符串;

转载于:https://www.cnblogs.com/mapping/archive/2010/12/02/1894573.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值