Oto rekurencyjna realizacja (na ciąg nie char) - jako metodę rozszerzenia, dokładnie taki efekt formatu metodzie (-ach) ramowej.
Wszystko, co musisz zrobić, to zmienić "wartość ciągu" na "wartość char" w metodzie rozszerzenia i odpowiednio zaktualizować testy, a to zadziała ... Cieszę się, że mogę to zrobić i opublikować, jeśli ktoś jest zainteresowany ?
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);
}
oto niektóre (MbUnit) testy jednostkowe, które mogą pomóc (to udowodnić jest poprawne):
[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));
}
może niektóre wyrażenia regularne? http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.aspx –
Jeśli jest to zawartość ciągu po trzecim dwukropku, którego szukasz, może powinieneś po prostu podzielić ciąg na dwukropek i dołączyć cokolwiek oprócz trzech pierwszych żetonów ...? – jishi
@jishi: Potrzebowałem również czegoś innego przy użyciu indeksu. – Iceyoshi