在字符串类上的子字符串方法对我来说一直感觉不够充分。通常,当你做一个子字符串时,你知道你想要从哪里开始的字符和你想要结束的字符。因此,我一直觉得必须指定长度作为第二个参数是愚蠢的。因此,我编写了自己的扩展方法。一个是接受startIndex和endIndex的方法。还有一个,它接受startText(字符串)和endText(字符串),这样你就可以只指定从哪里开始子字符串以及在哪里结束它的文本。
注意:我不能像.NET中那样命名方法为Substring,因为我的第一个重载采用了与.NET重载之一相同的参数类型。因此,我将它们命名为Subsetstring。请随意添加到CodePlex...
public static class StringExtensions
{
public static string Subsetstring(this string s, int startIndex, int endIndex)
{
if (startIndex > endIndex)
{
throw new InvalidOperationException("End Index must be after Start Index.");
}
if (startIndex < 0)
{
throw new InvalidOperationException("Start Index must be a positive number.");
}
if(endIndex <0)
{
throw new InvalidOperationException("End Index must be a positive number.");
}
return s.Substring(startIndex, (endIndex - startIndex));
}
public static string Subsetstring(this string s, string startText, string endText, bool ignoreCase)
{
if (string.IsNullOrEmpty(startText) || string.IsNullOrEmpty(endText))
{
throw new ArgumentException("Start Text and End Text cannot be empty.");
}
string temp = s;
if (ignoreCase)
{
temp = s.ToUpperInvariant();
startText = startText.ToUpperInvariant();
endText = endText.ToUpperInvariant();
}
int start = temp.IndexOf(startText);
int end = temp.IndexOf(endText, start);
return Subsetstring(s, start, end);
}
}
使用方法:
string s = "This is a tester for my cool extension method!!";
s = s.Subsetstring("tester", "cool",true);
输出:"测试我的"