Hier ist eine rekursive Implementierung ist (für String nicht char) - als Erweiterung Methode, um das Format der Rahmen Methode nachahmt (n).
Alles, was Sie tun müssen, ist 'Zeichenfolge Wert' in 'char Wert' in der Erweiterungsmethode zu ändern und die Tests entsprechend zu aktualisieren, und es wird funktionieren ... Ich bin glücklich, das zu tun und es zu veröffentlichen, wenn jemand interessiert ist ?
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);
}
Auch hier sind einige (MBUnit) Unit-Tests, die Ihnen helfen (um zu beweisen, es ist richtig):
[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));
}
Vielleicht:
In Ihrem speziellen Fall, es wäre wie so umgesetzt werden? http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.aspx –
Wenn es der Inhalt der Zeichenfolge nach dem 3. Doppelpunkt ist, nach dem Sie suchen, sollten Sie die Zeichenfolge einfach auf Doppelpunkt aufteilen und beitreten alles außer den ersten 3 Tokens ...? – jishi
@jishi: Ich brauchte auch etwas anderes mit dem Index. – Iceyoshi