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

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

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

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;

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

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

2 ответов


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

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

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


Я только что написал этот метод расширения, поэтому вы можете получить 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 = first вместо индекса на основе 0.