web-dev-qa-db-fra.com

Comment obtenir l'index de la deuxième virgule dans une chaîne

J'ai une chaîne dans un tableau qui contient deux virgules ainsi que des tabulations et des espaces blancs. J'essaie de couper deux mots dans cette chaîne, les deux avant les virgules, je ne me soucie vraiment pas des tabulations et des espaces blancs.

Ma chaîne ressemble à ceci:

String s = "Address1       Chicago,  IL       Address2     Detroit, MI"

Je reçois l'index de la première virgule

int x = s.IndexOf(',');

Et à partir de là, j'ai coupé la chaîne avant l'index de la première virgule.

firstCity = s.Substring(x-10, x).Trim() //trim white spaces before the letter C;

Alors, comment puis-je obtenir l'index de la deuxième virgule afin que je puisse obtenir ma deuxième chaîne?

J'apprécie vraiment votre aide!

31
Sem0

Vous devez utiliser du code comme celui-ci.

int index = s.IndexOf(',', s.IndexOf(',') + 1);

Vous devrez peut-être vous assurer de ne pas sortir des limites de la chaîne. Je vous laisse cette partie.

73
Logan Murphy

Je viens d'écrire cette méthode d'extension, vous pouvez donc obtenir le nième index de toute sous-chaîne dans une chaîne

public static class Extensions
{
    public static int IndexOfNth(this string str, string value, int nth = 1)
    {
        if (nth <= 0)
            throw new ArgumentException("Can not find the zeroth index of substring in string. Must start with 1");
        int offset = str.IndexOf(value);
        for (int i = 1; i < nth; i++)
        {
            if (offset == -1) return -1;
            offset = str.IndexOf(value, offset + 1);
        }
        return offset;
    }
}

Remarque: Dans cette implémentation, j'utilise 1 = premier, au lieu d'un index basé sur 0. Cela peut facilement être modifié pour utiliser 0 = d'abord, en ajoutant un nth++; au début et en modifiant le message d'erreur pour plus de clarté.

37
BenVlodgi