C#字符串截取方法--截前前面、截取中間、截取後面的幾個方法,個人覺得比家實用分享給大家

在寫代碼中我們經常需要對字符串進行截取操作 ,因此把它們做成了通用方法。以便後續進行調用哦。。

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章