• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:for文でline.substring(x,y)を繰り返す)

Java初心者のため、for文でline.substring(x,y)を繰り返す際にStringIndexOutOfBoundsExceptionが発生するエラーの修正方法は?

このQ&Aのポイント
  • Java初心者のため、桁数の多い数字が書かれているファイルから特定の範囲の数字を抽出するために、for文とline.substring(x,y)を使用しているが、StringIndexOutOfBoundsExceptionエラーが発生する。
  • エラーメッセージは「Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range」と表示される。
  • このエラーを解決するためには、ループの回数や文字列の範囲を正しく設定する必要がある。範囲を超えるような値を設定するとエラーが発生するため、ループ回数や文字列の長さを十分に考慮する必要がある。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

StringIndexOutOfBoundsException ってなんだかわかります?JavaDoc見ればわかると思いますが、 ---JavaDoc抜粋--- String メソッドによりスローされ、インデックスが負または文字列のサイズより大きいことを示します。 ---JavaDoc抜粋--- ということです。 今回の場合はsubstringメソッドへの引数が、 文字列lineの長さの範囲を超えたために上記の例外が発生しています。 ではどうすれば良いか? substringメソッドを実行する前に、substringへの引数の値がlineの長さの範囲にあるかどうかをチェックすれば良いです。 ヒント:Stringの長さはlengthメソッドで取得できる。

waka-a
質問者

お礼

早速のお答えありがとうございました。 x,yの値を調整することでエラーは出なくなりました。 ですがプログラムは動かず…。 まだまだ修正の余地あり、みたいです。 勉強してきます。 (このfor文は多重ループ内の一部なのです)

その他の回答 (1)

  • prophetok
  • ベストアンサー率44% (13/29)
回答No.2

とりあえず、間違いだけ指摘 for(i = 0,i <= 10,i++){ //10回繰り返す これだと11回繰り返してしまう。 substring() の引数の使い方が間違い。 質問者の書き方だと、9桁しか返ってこない。 JavaDocをよく読む。 "hamburger".substring(4, 8) では "urge" が返される "smiles".substring(1, 5) では "mile" が返される #1の方のアドバイスはちゃんと理解できましたか? break文を追加する必要がありますよ。

waka-a
質問者

お礼

prophetok様 ご指摘ありがとうございます。 おかげさまでsubstring()の使い方は理解できました。 ちょっとややこしいなと思ってしまいますが…。 Javaの勉強は、時間はかかっていますが、ちょっとずつ理解できてきているような気がします。 お礼の方は少々お待ち頂けますでしょうか。 運営者に問い合わせております。