字符串高级截取和统计

这几天要用到一些字符串的操作,网上也没有找好好用的,于是只有自己写。

C#自带的字符串截取Substring只能从头或者指定位置

而IndexOf又只能得到字符串第一次出现的位置

写了三个功能更强一些的方法,本代码是基本C# 3.0的,应用在2.0中,将this声明去掉即可。

代码如下:

        /// <summary>
        
/// 返回字符串中指字子字符串,指定出现位置指定长度的字符串
        
/// </summary>
        
/// <param name="str">原字符串</param>
        
/// <param name="searchstr">要搜索的字符串</param>
        
/// <param name="lengthnum">返回字符串的长度,0或-1返回到尾部所有字符串</param>
        
/// <param name="startnum">字符串出现的位置</param>
        
/// <returns></returns>
        public static string Substr(this string str, string searchstr,int lengthnum, int startnum)
        {
            
string result = "";
            
string resultstr = "";
            
if (startnum < 1)
                startnum 
= 1;


            
int searchstrlength = searchstr.Length;     //要查找字符串的长度

            
if (startnum <= 1 && lengthnum >0)
                result 
= str.Substring(0, lengthnum);
            
else if (startnum <= 1)
                result 
= str.Substring(0);
            
else
            {
                
int i = 1;
                
while (i<=startnum)
                {
                    str 
= str.Substring(str.IndexOf(searchstr) + searchstrlength);
                    
                    
if (i == startnum)
                    {
                        
if (lengthnum > 0)
                            result 
= str.Substring(0, lengthnum);
                        
else
                            result 
= str;

                        
break;
                    }
                    i
++;
                }
            }

            
return result;
        }

        
/// <summary>
        
/// 返回字符串中指字子字符串,指定出现次数的位置索引
        
/// </summary>
        
/// <param name="str">原字符串</param>
        
/// <param name="searchstr">要搜索的字符串</param>
        
/// <param name="startnum">字符串出现的位置</param>
        
/// <returns></returns>
        public static int IndexOfByNum(this string str, string searchstr, int startnum)
        {
            
if (startnum < 1)
                startnum 
= 1;

            
if (str.IndexOf(searchstr) == -1)
                
return -1;
            
else if(CountNum(str,searchstr) < startnum)
                
return -1;

            
int searchstrlength = searchstr.Length;     //要查找字符串的长度

            
if (startnum == 1)
                
return str.IndexOf(searchstr);
            
else
            {
                
return str.Substring(0,str.Length-str.Substr(searchstr,0,startnum).Length).Length;


            }
        }

        
/// <summary>
        
/// 统计字符串出现的次数
        
/// </summary>
        
/// <param name="text1">原字符串</param>
        
/// <param name="text2">要查找的字符串</param>
        
/// <returns>出现的次数</returns>
        public static int CountNum(this string text1, string text2)
        {
            
int total = 0;
            
int loact = text1.IndexOf(text2);
            
while (loact != -1)
            {
                
int loc = text1.IndexOf(text2) + text2.Length;
                
int len = text1.Length - loc;
                
if (loc != -1)
                {
                    text1 
= text1.Substring(loc, len);
                }
                loact 
= text1.IndexOf(text2);
                total
++;
            }
            
return total;
        }

如果你觉得本方法的算法有待改进,欢迎指正。

原文地址:https://www.cnblogs.com/leadwit/p/1320326.html