再帰的実装(文字列をchar型ではない)である - フレームワーク方法(単数または複数)の形式を模倣、拡張メソッドとして。
拡張メソッドで '文字列値'を 'char値'に変更し、それに応じてテストを更新するだけで済みます。興味があれば投稿してもらえます?
public static int IndexOfNth(
this string input, string value, int startIndex, int nth)
{
if (nth < 1)
throw new NotSupportedException("Param 'nth' must be greater than 0!");
if (nth == 1)
input.IndexOf(value, startIndex);
return
input.IndexOfNth(value, input.IndexOf(value, startIndex) + 1, --nth);
}
また、ここであなたを助けるかもしれないいくつかの(MbUnitの)ユニットテスト(それが正しいことを証明するために)、次のとおりです。
[Test]
public void TestIndexOfNthWorksForNth1()
{
const string input = "foo<br />bar<br />baz<br />";
Assert.AreEqual(3, input.IndexOfNth("<br />", 0, 1));
}
[Test]
public void TestIndexOfNthWorksForNth2()
{
const string input = "foo<br />whatthedeuce<br />kthxbai<br />";
Assert.AreEqual(21, input.IndexOfNth("<br />", 0, 2));
}
[Test]
public void TestIndexOfNthWorksForNth3()
{
const string input = "foo<br />whatthedeuce<br />kthxbai<br />";
Assert.AreEqual(34, input.IndexOfNth("<br />", 0, 3));
}
たぶん、いくつかの正規表現? http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.aspx –
3番目のコロンの後の文字列の内容なら、おそらくコロンで文字列を分割して結合するだけでよい最初の3つのトークン以外何も...? – jishi
@jishi:私はまた、インデックスを使用して別の何かが必要でした。 – Iceyoshi