C#字符串截取方法--截前前面、截取中间、截取后面的几个方法,个人觉得比家实用分享给大家

C# 同时被 2 个专栏收录
13 篇文章 0 订阅
3 篇文章 0 订阅

在写代码中我们经常需要对字符串进行截取操作 ,因此把它们做成了通用方法。以便后续进行调用哦。。

        /// <summary>
        /// 扩展是否为null, true为null
        /// </summary>
        public static bool IsNullOrEmpty(this string s)
        {
            return string.IsNullOrEmpty(s);
        }


        /// <summary>
        /// (截末)截取字符串,根据开始位置起查找,出现"开始字符"位置起到最后,是否忽略大小写,是否包含开始字符
        /// "房Chen华是个高手".SubToEndString("Chen",0,true,true)返回 陈华是个高手 
        /// </summary>
        /// <param name="str">要 截取字符串</param>
        /// <param name="startStr">匹配开始字符找到对应的开始截取的位置</param>
        /// <param name="startIdx">开始位置即从什么位置开始查找</param>
        /// <param name="isContains">是否包含开始字符</param>
        /// <param name="isIgnoreCase">是否忽略大小写比较true为不敏感,false为敏感</param>
        /// <returns>截取字符串</returns>
        public static string SubToEndString(this string str, string startStr, int startIdx, bool isContains = false, bool isIgnoreCase = true)
        {
            if (str.IsNullOrEmpty() || startIdx > str.Length - 1 || startIdx < 0)
                return string.Empty;
            int idx = str.IndexOf(startStr, startIdx, isIgnoreCase ? StringComparison.OrdinalIgnoreCase : StringComparison.Ordinal);
            if (idx < 0) //没找到
                return string.Empty;
            return str.Substring(isContains ? idx : idx + startStr.Length);
        }



        /// <summary>
        ///  (截末)截取字符串,根据开始字符,是否包含开始字符,大小写是否敏感(从0位置开始,),
        ///   "房陈huA是个高手".SubToEndString("HUA",true,true)返回 huA是个高手
        /// </summary>
        /// <param name="str">要 截取字符串</param>
        /// <param name="startStr">开始字符</param>
        /// <param name="isContains">是否包含开始字符</param>
        /// <param name="isIgnoreCase">是否忽略大小写比较</param>
        /// <returns>截取字符串</returns>
        public static string SubToEndString(this string str, string startStr, bool isContains = false, bool isIgnoreCase = true)
        {
            return str.SubToEndString(startStr, 0, isContains, isIgnoreCase);
        }

        /// <summary>
        /// (截头)截取字符串,从指定位置startIdx开始,出现"结束字符"位置之间的字符串,是否忽略大小写,是否包含开始字符
        /// "房陈华是个高手".StartSubString(0,"陈",true,true)返回 房陈
        /// </summary>
        /// <param name="str">要截取字符串</param>
        /// <param name="startIdx">开始查找的序号</param>
        /// <param name="endStr"></param>
        /// <param name="isContainsint">是否包含开始字符</param>
        /// <param name="isIgnoreCase"></param>
        /// <returns>截取字符串</returns>
        public static string StartSubString(this string str, int startIdx, string endStr, bool isContains = false, bool isIgnoreCase = true)
        {
            if (str.IsNullOrEmpty() || startIdx > str.Length - 1 || startIdx < 0)
                return string.Empty;
            int idx = str.IndexOf(endStr, startIdx, isIgnoreCase ? StringComparison.OrdinalIgnoreCase : StringComparison.Ordinal);
            if (idx < 0) //没找到
                return string.Empty;
            return str.Substring(0, isContains ? idx + endStr.Length : idx);
        }

        /// <summary>
        /// (截头)截取字符串,从0位置开始,出现"结束字符"位置之间的字符串, 忽略大小写,是否包含开始字符
        /// "Fang陈华是个高手".StartSubString("陈",true,"华")返回 陈华
        /// </summary>
        /// <param name="str">要 截取字符串</param>
        /// <param name="endStr">开始字符</param>
        /// <param name="isContains">是否包含开始字符</param>
        /// <returns>截取字符串</returns>
        public static string StartSubString(this string str, string endStr, bool isContains = false)
        {
            return str.StartSubString(0, endStr, isContains);
        }

        /// <summary>
        ///  (截中)截取字符串,根据开始字符,结束字符,是否包含开始字符,结束字符(默认为不包括),大小写是否敏感(从0位置开始,)
        ///  "Fang陈华是个高手".SubBetweenString("陈","手",true,true)返回 陈华是个高手
        /// </summary>
        /// <param name="str">要 截取字符串</param>
        /// <param name="startStr">开始字符</param>
        /// <param name="endstr">结束字符</param>
        /// <param name="isContainsStartStr">是否包含开始字符</param>
        /// <param name="isContainsEndStr">是否包含结束字符</param>
        /// <param name="isIgnoreCase">是否忽略大小写比较</param>
        /// <returns>截取字符串</returns>
        public static string SubBetweenString(this string str, string startStr, string endstr, bool isContainsStartStr = false, bool isContainsEndStr = false, bool isIgnoreCase = true)
        {
            if (str.IsNullOrEmpty())
                return string.Empty;
            int staridx = str.IndexOf(startStr, 0, isIgnoreCase ? StringComparison.OrdinalIgnoreCase : StringComparison.Ordinal);
            if (staridx < 0) //没找到
                return string.Empty;
            int endidx = str.IndexOf(endstr, staridx + startStr.Length, isIgnoreCase ? StringComparison.OrdinalIgnoreCase : StringComparison.Ordinal);
            if (endidx < 0) //没找到
                return string.Empty;
            var start = isContainsStartStr ? staridx : staridx + startStr.Length;
            var end = isContainsEndStr ? endidx + endstr.Length : endidx;
            if (end <= start)
                return string.Empty;
            return str.Substring(start, end - start);
        }

        /// <summary>
        /// 反向截末——截取字符串,根据开始字符,开始搜索位置(反向的即右到左),是否忽略大小写,
        /// 是否包含开始字符
        /// </summary>
        /// <param name="str">要 截取字符串</param>
        /// <param name="endStartStr">从后面开始匹配的字符串</param>      
        /// <param name="isContains">是否包含开始字符——默认为不包括</param>
        /// <param name="isIgnoreCase">是否忽略大小写比较true为不敏感,false为敏感</param>
        /// <returns>截取字符串</returns>
        public static string LastSubEndString(this string str, string endStartStr, bool isContains = false, bool isIgnoreCase = true)
        {
            if (str.IsNullOrEmpty())
                return string.Empty;
            int idx = str.LastIndexOf(endStartStr, isIgnoreCase ? StringComparison.OrdinalIgnoreCase : StringComparison.Ordinal);
            if (idx < 0) //没找到
                return string.Empty;
            return str.Substring(isContains ? idx : idx + endStartStr.Length);
        }


        /// <summary>
        /// 反向截取中间——截取字符串,根据开始字符,开始搜索位置(反向的即右到左),是否忽略大小写,
        /// </summary>
        /// <param name="str">要截取字符串</param>
        /// <param name="endStartStr">从后面开始匹配的字符串</param>
        /// <param name="endEndStr">结束字符</param>
        /// <param name="isContainsendStartStr">是否包含开始字符--默认不包括</param>
        /// <param name="isContainsEndEndStr">是否包含结束字符--默认不包括</param>
        /// <param name="isIgnoreCase">是否忽略大小写比较true为不敏感,false为敏感</param>
        /// <returns>返回截得字符串</returns>
        public static string LastBetweenString(this string str, string endStartStr, string endEndStr, bool isContainsendStartStr = false, bool isContainsEndEndStr = false, bool isIgnoreCase = true)
        {
            if (str.IsNullOrEmpty())
                return string.Empty;
            int endidx = str.LastIndexOf(endEndStr, isIgnoreCase ? StringComparison.OrdinalIgnoreCase : StringComparison.Ordinal);
            if (endidx < 0) //没找到
                return string.Empty;
            int staridx = str.Substring(0, endidx).LastIndexOf(endStartStr, endidx, isIgnoreCase ? StringComparison.OrdinalIgnoreCase : StringComparison.Ordinal);
            if (staridx < 0) //没找到
                return string.Empty;

            var start = isContainsendStartStr ? staridx : staridx + endStartStr.Length;
            var end = isContainsEndEndStr ? endidx + endEndStr.Length : endidx;
            if (end <= start)
                return string.Empty;
            return str.Substring(start, end - start);
        }

 

  • 2
    点赞
  • 3
    评论
  • 10
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值