1

私はtext:を持っています"The camel is big"。次に文字を探し"e"、次の 2 文字を文字列変数に格納したいので、値をnext1取得してスペースを格納します。しかし、コンパイラはIndex が array の範囲外であるというメッセージとともに例外をスローします。コードは次のとおりです。"l"next2" "

for (int i = 0; i < text.Length; i++)
{
    if (text[i]=='e' || text[i]=='E')
    {
        next1 = text[i + 1].ToString();
        next2 = text[i + 2].ToString(); //this throws exception...
    }
}

コメントありがとうございます。はいi、最後のポイントにあるときに発生し、存在しない次の文字を取得しようとします。どうすればそれを防ぐことができますか。私のテキストは大きく、「e」がたまたま最後の文字になることがあります...

4

3 に答える 3

3

'e'では、文字列の最後の文字としてが存在する場合、何が起こると思いますか?

next1それは設定されるべきではなく、まったく設定されるべきではありませんnext2か?それらをデフォルトにするnullか、空の文字列にする必要がありますか?

一般的に2つのオプションがあります。forループを0からに変更text.Length-2して、最後の2文字を処理しないようにします(つまり、next1以前next2の文字から変更されないようにします。または、内部で長さよりも大きいifかどうかを確認する必要があります。i+1文字列の「何か他のもの」を実行し、それから同じことを実行しi+2ます。「何か他のもの」とは、任意の数のオプションです。

于 2013-02-06T21:00:54.857 に答える
3

2 行目 ( ) は、文字列の最後の文字の前のインデックスにortext[i + 2]がある場合にエラーをスローします。最後の文字の場合、最初の行 ( ) がスローされます。eEtext[i + 1]

あなたが与えたサンプル文字列は例外をスローしません。

その時点text[i + 2]で、文字列 (文字配列) の範囲外になります。

それが起こる直前にループする必要があります:

for (int i = 0; i < text.Length - 2; i++)
于 2013-02-06T20:58:17.410 に答える
0

iが最後またはほぼ最後の要素である場合、配列外の要素にアクセスしようとします!!
ループ内の相互作用を2つ減らすようにしてください:)

于 2013-02-06T21:01:03.130 に答える