Voici une mise en œuvre récursive - en tant que méthode d'extension, imitant le format de la ou des méthodes du cadre :
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)
return input.IndexOf(value, startIndex);
return input.IndexOfNth(value, input.IndexOf(value, startIndex) + 1, --nth);
}
Voici également quelques tests unitaires (MBUnit) qui pourraient vous aider (à prouver que c'est correct) :
[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));
}
0 votes
Avec quoi avez-vous travaillé jusqu'à présent ?
3 votes
J'ai modifié votre réponse pour exprimer plus clairement ce que vous voulez. J'espère que vous obtiendrez des réponses qui correspondent à votre question. Le fait de ne pas parler couramment l'anglais n'est pas un problème sur Stack Overflow, vous pouvez toujours ajouter une ligne demandant à quelqu'un de plus compétent de modifier votre question et de la nettoyer, mais vous devez vous-même vous efforcer de fournir des exemples dans la question afin que les gens comprennent ce dont vous avez besoin.