Как получить индекс второй запятой в строке

У меня есть строка в массиве, содержащая две запятые, а также вкладки и пробелы. Я пытаюсь вырезать два слова в этой строке, оба они перед запятыми, мне действительно не нравятся вкладки и пробелы.

Моя строка выглядит примерно так:

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

Я получаю индекс первой запятой

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

И оттуда я вырезал строку перед индексом первой запятой.

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

Итак, как мне получить индекс второй запятой, чтобы я мог получить вторую строку?

Я очень ценю вашу помощь!

Ответы

Ответ 1

Вы должны использовать такой код.

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

Возможно, вам нужно будет убедиться, что вы не выходите за пределы строки. Я оставлю эту часть до вас.

Ответ 2

Я просто написал этот метод Extension, поэтому вы можете получить n-й индекс любой подстроки в строке

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;
    }
}

Примечание. В этой реализации я использую 1 = сначала, а не индекс, основанный на 0.