zoukankan      html  css  js  c++  java
  • C#截取字符串长度方法

    方法一、

            /// <summary>
            /// 截取指定长度的字符串
            /// </summary>
            /// <param name="str">要截取的字符串</param>
            /// <param name="len">要截取的长度</param>
            /// <param name="flag">截取后是否加省略号(true加,false不加)</param>
            /// <returns></returns>
            public static string CutString(string str, int len, bool flag)
            {
                string _outString = "";
                int _len = 0;
                for (int i = 0; i < str.Length; i++)
                {
                    if (Char.ConvertToUtf32(str, i) >= Convert.ToInt32("4e00", 16) && Char.ConvertToUtf32(str, i) <= Convert.ToInt32("9fff", 16))
                    {
                        _len += 2;
                        if (_len > len)//截取的长度若是最后一个占两个字节,则不截取
                        {
                            break;
                        }
                    }
                    else
                    {
                        _len++;
                    }
    
    
                    try
                    {
                        _outString += str.Substring(i, 1);
                    }
                    catch
                    {
                        break;
                    }
                    if (_len >= len)
                    {
                        break;
                    }
                }
                if (str != _outString && flag == true)//判断是否添加省略号
                {
                    _outString += "...";
                }
                return _outString;
            }


    方法二、

            /// <summary>
            /// 截取指定长度的字符串
            /// </summary>
            /// <param name="str">要截取的字符串</param>
            /// <param name="len">要截取的长度</param>
            /// <param name="flag">截取后是否加省略号(true加,false不加)</param>
            /// <returns></returns>
            public static string CutString(string str, int len, bool flag)
            {
                System.Text.ASCIIEncoding ascii = new System.Text.ASCIIEncoding();
                byte[] bts = ascii.GetBytes(str);
                int _len = 0;
                string _outString = "";
                for (int i = 0; i < bts.Length; i++)
                {
                    if ((int)bts[i] == 63)//两个字符
                    {
                        len += 2;
                        if (_len > len)//截取的长度若是最后一个占两个字节,则不截取
                        {
                            break;
                        }
                    }
                    else
                    {
                        len += 1;
                    }
    
                    try
                    {
                        _outString += str.Substring(i, 1);
                    }
                    catch
                    {
                        break;
                    }
    
                    if (_len >= len)
                    {
                        break;
                    }
                }
                if (str != _outString && flag == true)//判断是否添加省略号
                {
                    _outString += "...";
                }
                return _outString;
            }

    方法三、

            /// <summary>
            /// 截取指定长度的字符串
            /// </summary>
            /// <param name="str">要截取的字符串</param>
            /// <param name="len">要截取的长度</param>
            /// <param name="flag">截取后是否加省略号(true加,false不加)</param>
            /// <returns></returns>
            public static string CutString(string str, int len, bool flag)
            {
                if (str == null || str.Length == 0 || len <= 0)
                {
                    return string.Empty;
                }
    
                int l = str.Length;
    
                #region 计算长度
                int clen = 0;
                while (clen < len && clen < l)
                {
                    //每遇到一个中文,则将目标长度减一。
                    if ((int)str[clen] > 128)
                    {
                        len--;
                    }
                    clen++;
                }
                #endregion
    
                if (clen < l)
                {
                    return flag ? str.Substring(0, clen) + "..." : str.Substring(0, clen);
                }
                else
                {
                    return str;
                }
            }
  • 相关阅读:
    6-4.粗体标签
    [Unity3D] 如何实现点击按钮退出游戏
    [Unity3D] 载入游戏地图时背景图片随机切换 & 数字百分比进度条
    [Unity3D] 鼠标点击图片移动效果
    [3DMAX]如何将骨骼与模型绑定在一起(蒙皮) & 如何实现自动化人物模型蒙皮
    [Unity 3D]用鼠标滚轮实现镜头放大和缩放,并添加距离限制
    [Unity3D] 如何实现围绕旋转
    [Unity3D] 如何实现注视旋转
    Css 图片自适应
    Scss 定义内层class的简单写法
  • 原文地址:https://www.cnblogs.com/lollipop/p/2687158.html
Copyright © 2011-2022 走看看