• [原创]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 官方微信开发视频教程:《微信公众号+小程序快速开发》
  • 相关阅读:
    jvm相关参数
    fdisk磁盘分区与挂载
    解决 Redis 只读不可写的问题
    虚拟机linux系统明明已经安装了ubuntu,但是每次重新进入就又是选择安装界面
    linux下更改MySQL数据库存储路径
    消除过期的引用对象
    java避免创建不必要的对象
    Oracle minus用法详解及应用实例
    Mapreduce详解Shuffle过程
    Leet Code 7.整数反转
  • 原文地址:https://www.cnblogs.com/szw/p/1003321.html
Copyright © 2020-2023  润新知