0

私はこのコードを持っています:

String input = JOptionPane.showInputDialog("Enter text");
StringBuilder forward = new StringBuilder("");
StringBuilder backward = new StringBuilder("");
int f = 0;
int b = input.length();


while(f < input.length()) {

    while(input.charAt(f) > 63) {

        forward.append(input.charAt(f));
        f++;

    }

    f++;
} 

System.out.println(forward);

プログラムは終了していませんが、ここではすでに例外がスローされています。それは言う:

スレッド"main"の例外java.lang.StringIndexOutOfBoundsException:文字列インデックスが範囲外です:5(範囲は、入力する文字数によって異なります)at java.lang.String.charAt(Unknown Source)

奇妙なことに、私は昨日同様のコードで作業し、それは完全に機能し、実際には同じでした。

私はすでにスタックフォーラムとドキュメントオラクルを検索しましたが、インデックスが文字列のサイズと等しい場合にのみこの例外がスローされることがわかりました(charAtメソッドの場合)。

それでもここで問題があるようですが、私はそれを見つけることができません。

while(input.charAt(f) > 63)

編集:

そのコードが機能しないのはなぜですか?繰り返しますが、上記と同じ例外をスローしますか?

while(b > 0) {

        if(input.charAt(b) > 63) {

            backward.append(input.charAt(b));

        }

        b--;
    }
4

1 に答える 1

5

の値はf、ここで文字列の長さを超える可能性があります。

while (input.charAt(f) > 63) {
    forward.append(input.charAt(f));

    // This next line might increase f past the end of the string.
    f++;
}

代わりにこれを試してください:

while (f < input.length()) {

    char c = input.charAt(f);
    if (c > 63) {
        forward.append(c);
    }

    f++;
} 

f < input.length()2番目のバージョンは、にアクセスする前に常にチェックしますinput.charAt(f)

于 2012-08-04T12:58:47.913 に答える