zoukankan      html  css  js  c++  java
  • 开发通用类 字符串截断篇

    /// <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();
    }
  • 相关阅读:
    自定义 ListView
    linux IO重定向
    Facebook开源C++组件库Folly
    在vi按了ctrl+s后
    让Erlang服务器后台运行
    mysql innodb 性能相关参数
    linux 网卡驱动升级
    kernel panic
    32位Linux下使用2G以上大文件的几个相关宏的关系
    CentOS安装erlang
  • 原文地址:https://www.cnblogs.com/judgelee/p/2631315.html
Copyright © 2011-2022 走看看