public static class StringExtensions
{
public static int IndexOfTimes(this string s, string value, int times)
{
return s.IndexOfTimes(value, 0, times);
}
public static int IndexOfTimes(this string s, string value, int startindex, int times)
{
if (string.IsNullOrEmpty(s)) return -1;
startindex = startindex < 0 ? 0 : startindex;
if (times <= 0)
return -1;
int at = 0;
int count = 0;
while (startindex < s.Length)
{
at = s.IndexOf(value, startindex);
if (at == -1)
return -1;
count++;
if (count == times)
return at;
startindex = at + 1;
}
return -1;
}
public static string ReplaceFirst(this string s, string oldValue, string newValue)
{
return s.ReplaceTime(oldValue, newValue, 1);
}
public static string ReplaceTime(this string s, string oldValue, string newValue, int times)
{
int pos=s.IndexOfTimes(oldValue, times);
if (pos < 0)
return s;
if (string.IsNullOrEmpty(newValue))
return "";
s = s.Remove(pos, oldValue.Length);
s = s.Insert(pos, newValue);
return s;
}
}