2

なぜ例外が発生するのか、本当に困惑しています。これが私がデモンストレーションするためにまとめたSSCCEです:

static void Main(string[] args)
{
    string tmp =
               "Child of: View Available Networks (197314), Title: N/A  (66244)";
    Console.WriteLine(tmp);

    int one = tmp.LastIndexOf('('), two = tmp.LastIndexOf(')');

    //my own error checking
    Console.WriteLine(tmp.Length);//returns 63
    Console.WriteLine(one < 0);//returns false
    Console.WriteLine(two > tmp.Length);//returns false
    Console.WriteLine(one);//returns 56
    Console.WriteLine(two);//returns 62

    /*
     * error occurs here.
     * ArgumentOutOfRangeException Index and length must refer to
     * a location within the string.
     * Parameter name: length
     */
    string intptr = tmp.Substring(one, two);

    Console.WriteLine(intptr);
}

私は自分が間違っていることを理解できません(Javaのバックグラウンドから来ているのは些細なことかもしれませんが)、うまくいけば他の誰かが見ることができます。

4

3 に答える 3

5

substring■2番目のパラメータは、文字列内の位置ではなく、抽出する文字列の長さです。

あなたができる

string intptr = tmp.Substring(one + 1, two - one - 1);
于 2012-07-10T14:32:28.293 に答える
2

あなたのコード

tmp.Substring(one, two);

する必要があります

tmp.Substring(one, (two-one+1));

2番目のパラメーターは、必要な部分文字列の長さです。これは、終了インデックスのように使用していると思います。そして、私はLINQが大好きなので、次のように実行することもできます。

string.Join(string.Empty, s.Skip(5).Take(7 - 5 + 1)); //build a string from IEnumerable<char>
于 2012-07-10T14:33:35.420 に答える
1

string.Substring(startIndex、count)startIndexとfinishIndexを記述しましたが、間違っています

于 2012-07-10T14:32:59.590 に答える