zoukankan      html  css  js  c++  java
  • 高效率的C#截取指定长度字符串,大于指定长度的,在末尾显示指定字符,默认为"..."

    C#中字符串截断本没有那么麻烦,问题就出在string.Substring()这个方法将中文也按一个字符计算,导致我们在实际应用中截取字符串(中英文组合)后的“长度”不一致。

    国际惯例,在网上搜索了一下,大致得到了两中截断算法:
    1. 从起始位置取得字符 -> 逐一用正则表达式匹配 -> 拼接成最终字符串。(这是广为流传的方法,也是效率最低的方法。)
    2. 从起始位置取得字符 -> 逐一用ASCII比较 -> 再拼接成最终字符串。

    相比之下,算法2比算法1高明,毕竟ASCII比较比正则表达式的执行效率更高。但最终,我仍然没有使用算法2,而是进行了进一步的优化:

            /// <summary>
            /// 高效率的C#截取指定长度字符串,大于指定长度的,在末尾显示指定字符,默认为"..."
            /// 备注:C#中字符串截断本没有那么麻烦,问题就出在string.Substring()这个方法将中文也按一个字符计算,导致我们在实际应用中截取字符串(中英文组合)后的“长度”不一致。
            /// </summary>
            /// <param name="str"></param>
            /// <param name="len"></param>
            /// <param name="endShow"></param>
            /// <returns></returns>
            public static string CutStr(string str, int len, string endShow = "...")
            {
                if (!string.IsNullOrWhiteSpace(str))
                {
                    int strLen = str.Length;
    
                    #region 计算长度
                    int tempCutLen = 0;
                    while (tempCutLen < len && tempCutLen < strLen)
                    {
                        //每遇到一个中文,则将目标长度减一。
                        if ((int)str[tempCutLen] > 128) { len--; }
                        tempCutLen++;
                    }
                    #endregion
    
                    if (tempCutLen < strLen && tempCutLen > 0)
                    {
                        str = string.Format("{0}{1}", str.Substring(0, tempCutLen), endShow);
                    }
                }
                return str;
            }

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    【codeforces 791D】 Bear and Tree Jumps
    【codeforces 791C】Bear and Different Names
    【codeforces 791B】Bear and Friendship Condition
    【codeforces 791A】Bear and Big Brother
    【t017】YL杯超级篮球赛
    Java Web整合开发(80) -- EJB & WebService
    搜索与排序
    T2821 天使之城 codevs
    T1155 金明的预算方案 codevs
    后缀表达式
  • 原文地址:https://www.cnblogs.com/ful1021/p/4804391.html
Copyright © 2011-2022 走看看