开发通用类 - 字符串截断篇

/// <summary>
/// 截断字符串
/// </summary>
/// <param name="source">源字符串</param>
/// <param name="length">截取长度</param>
/// <param name="isAddEllipsis">结尾是否带有省略号(省略号占用2个长度)</param>
/// <returns></returns>
public static string CutStringForString(string source, int length, bool isAddEllipsis)
{
    // 空字符串
    if (string.IsNullOrEmpty(source))
    {
        return string.Empty;
    }

    // 长度不够
    char[] sourceArray = source.ToCharArray();
    if (sourceArray.Length <= length)
    {
        return source;
    }

    // 超长、截断
    string newStr = source.Substring(0, (isAddEllipsis ? length - 2 : length));
    if (isAddEllipsis)
    {
        newStr += "……";
    }

    return newStr;

}

/// <summary>
/// 根据字节长度截取字符串
/// </summary>
/// <param name="source">源字符串</param>
/// <param name="length">截取长度</param>
/// <param name="isAddEllipsis">结尾是否带有省略号(省略号占用4个字节)</param>
/// <returns></returns>
public static string CutStringForByte(string source, int length, bool isAddEllipsis)
{
    // 空字符串
    if (string.IsNullOrEmpty(source))
    {
        return string.Empty;
    }

    // 长度不够
    int sourceByteLength = 0;
    char[] sourceArray = source.ToCharArray();
    for (int i = 0; i < sourceArray.Length; i++)
    {
        if (Convert.ToInt32(sourceArray[i]) > 255)
        {
            sourceByteLength += 2;
        }
        else
        {
            sourceByteLength++;
        }
    }
    if (sourceByteLength <= length)
    {
        return source;
    }

    // 长度超长
    //如果结尾添加 … 则要在原本截取长度基础上减去2
    if (isAddEllipsis)
    {
        length = length - 4;
    }
    int k = 0;
    var newStr = new StringBuilder();
    sourceByteLength = 0;
    while (sourceByteLength < length)
    {
        newStr.Append(sourceArray[k]);
        if (Convert.ToInt32(sourceArray[k]) > 255)
        {
            sourceByteLength += 2;
        }
        else
        {
            sourceByteLength++;
        }
        k++;
    }
    if (isAddEllipsis)
    {
        newStr.Append("……");
    }

    return newStr.ToString();
}

 

转载于:https://www.cnblogs.com/judgelee/archive/2012/08/10/2631315.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值