zoukankan      html  css  js  c++  java
  • [原创]SubString()功能扩展

        首先我们来看2个需要用到SubString()的地方:

    1、 在C#中,我们时常需要缩减字符,并且用"..."取代被缩减的部分,通常我们使用的是(string).SubString(),然后我们可以这样缩减:

    str = (str.Length>10)? str.SubString(0,10)+"..." : str ;

        这样的写好处是比较容易想到,且简要易懂,便于编写。
        这样写的不足是格式比较生硬,不便于复用,编写效率低。

    2、 我在开发一些项目的时候,还经常有这样的需求:一个N长度的字符串,要取末尾的几个字符,或者中间指定起始和结尾的一段字符,其余的用"..."表示,这时候往往需要比较复杂的判断,最后用一个(string).SubString()

        下面我提供一种可以同时解决灵活性和繁琐判断的解决方案,希望可以抛砖引玉:

     1        /// <summary>
     2        /// 区字符串固定长度,其余的省略
     3        /// 
     4        /// 规则:
     5        ///  1.如果startIndex大于字符串长度,则自动调整到取最后maxLangth长度。如果此时maxLangth长度比字符串长度还要大,那么startIndex回到0
     6        ///  2.如果在startIndex基础上,取maxLangth长度大于比字符串长度,那么maxLangth自动取到可能的最大值,即从startIndex一直取到字符串末尾
     7        ///  3.结果中,字符串只要有削减的地方,都以".."替代
     8        /// </summary>
     9        /// <param name="str">原字符串</param>
    10        /// <param name="startIndex">起始字符串位置</param>
    11        /// <param name="maxLangth">最长字符个数</param>
    12        /// <returns></returns>

    13        public static string SubString(string str, int startIndex, int maxLangth)
    14        {
    15            string substring = "";
    16
    17            //调整startIndex
    18            if (startIndex > str.Length - 1)//如果startIndex大于字符串长度
    19            {
    20                startIndex = (str.Length - maxLangth > 0? str.Length - maxLangth : 0;//则自动调整到取最后maxLangth长度。如果此时maxLangth长度比字符串长度还要大,那么startIndex回到0
    21            }

    22
    23            //调整maxLangth
    24            if (startIndex + maxLangth > str.Length)//如果在startIndex基础上,取maxLangth长度大于比字符串长度
    25            {
    26                maxLangth = str.Length - startIndex;//那么maxLangth自动取到可能的最大值,即从startIndex一直取到字符串末尾
    27            }

    28            //调整完成
    29
    30            //加缩略符号
    31            substring += (startIndex > 0? ".." : "";//如果开头削减,以".."替代
    32
    33            //进行取定长字符串
    34            substring += str.Substring(startIndex, maxLangth);
    35
    36            //加缩略符号
    37            substring += (str.Length - startIndex - maxLangth > 0? ".." : "";//如果结尾削减,以".."替代
    38
    39            return substring;
    40        }
     
    41   


        你可以把这段程序放在一个单独的类库中,比如Common.StringHandle。由于采用了静态方式,你只需要这样直接调用:

    str = Common.StringHandle.SubString(str , 7 , 8) ;

        关于处理机制和参数说明,在编写的时候我已经说明的比较详细了,下面我居举一些简单的例子:

    要求:字符串“0123456789”中,取前5个字符,其余用“..”替代
    代码:Common.StringHandle.SubString("0123456789",0,5)
    输出结果:01234..

    要求:字符串“0123456789”中,取“5”开始的3字符(不足3个则全取),如果之后还有其余用“..”替代
    代码:Common.StringHandle.SubString("0123456789",5,3)
    输出结果:..567..

    要求:字符串“0123456789”中,取“5”开始的10字符(不足10个则全取),如果之后还有其余用“..”替代
    代码:Common.StringHandle.SubString("0123456789",5,10)
    输出结果:..56789

    我在这也只是给出一种思路,这段代码还有很多的扩展余地:比如约定".."的形式、实现从右截取N个字符,或者在.net3.5中使用扩展方法(Extension Method)来完成等等(有些我已经实现,但由于加进来可能冲淡主题了,在此省略,不过我们可以例外探讨)。

    希望可以抛砖引玉,跟大家一起探讨!

    转载请注明出处和作者,谢谢!
    作者:JeffreySu / QQ:498977166
    博客:http://szw.cnblogs.com/

    Senparc官方教程《微信开发深度解析:微信公众号、小程序高效开发秘籍》,耗时2年精心打造的微信开发权威教程,点击这里,购买正版
    
微信开发深度解析:微信公众号、小程序高效开发秘籍

    Senparc 官方微信开发视频教程:《微信公众号+小程序快速开发》,点击这里点击观看
    Senparc 官方微信开发视频教程:《微信公众号+小程序快速开发》
  • 相关阅读:
    笔记35 跨重定向请求传递数
    判断邮箱的正则表达式
    按钮
    async await 的用法
    笔记34 Spring MVC的高级技术——处理multipart形式的数据
    Convert Sorted Array to Binary Search Tree
    Binary Tree Zigzag Level Order Traversal
    Unique Binary Search Trees,Unique Binary Search Trees II
    Validate Binary Search Tree
    Populating Next Right Pointers in Each Node,Populating Next Right Pointers in Each Node II
  • 原文地址:https://www.cnblogs.com/szw/p/1003321.html
Copyright © 2011-2022 走看看