web-dev-qa-db-ja.com

文字列の2番目のコンマのインデックスを取得する方法

2つのコンマとタブおよび空白を含む配列に文字列があります。その文字列の2つの単語をコンマの前にカットしようとしています。タブと空白は気にしません。

私の文字列はこれに似ています:

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番目のコンマのインデックスを取得して2番目の文字列を取得するにはどうすればよいですか?

本当に助かりました!

31
Sem0

このようなコードを使用する必要があります。

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

ただし、文字列の境界を超えないようにする必要があります。その部分はあなたに任せます。

73
Logan Murphy

この拡張メソッドを作成したばかりなので、文字列内の任意の部分文字列の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;
    }
}

注:この実装では、0ベースのインデックスの代わりに1 = firstを使用します。これは、最初にnth++;を追加し、わかりやすくするためにエラーメッセージを変更することにより、0 = firstを使用するように簡単に変更できます。

37
BenVlodgi