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;
            }
        }

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM