• ベストアンサー

while文の指定エラー

int beginIndex = 0; //現在のindex int endIndex = txt.length(); //最後のindex //while(txt.substring(beginIndex, endIndex).length() > 0){ out.println(txt.substring(beginIndex, endIndex).length()); beginIndex += 300; out.println(txt.substring(beginIndex, endIndex).length()); beginIndex += 300; out.println(txt.substring(beginIndex, endIndex).length()); beginIndex += 300; //} String型の変数txtの長さを読み込んで、beginIndexの値を300ずつ増やしていくソースなのですが、このようにすると結果が得られるのですが、 int beginIndex = 0; //現在のindex int endIndex = txt.length(); //最後のindex while(txt.substring(beginIndex, endIndex).length() > 0){ out.println(txt.substring(beginIndex, endIndex).length()); beginIndex += 300; } のようにwhileの部分のコメントを外し、txtの長さが0になるまで回そうとするとエラーが起きてしまいます。 while文の指定だとは思うのですが、どこがおかしいのか直し方がわかりません。 わかる方教えてください、よろしくお願いします。

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

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

こんにちは。 どうやらsubstringにおいて、beginIndexが文字列より大きくなってしまった、及びbeginIndexがendIndexより大きくなったのが原因のようです。 while(txt.substring(beginIndex, endIndex).length() > 0){ 上記の行です。 while(beginIndex <= endIndex ){ このようにしてはどうかと思います。

bell_xxx
質問者

お礼

回答ありがとうございます。 実験的に300ずつ減らしたためこのようなエラーになってしまったようです。実際は最終的に丁度0になるようにもっと少なく減らす予定でしたが、beginIndex <= endIndex は思いつきもしませんでした。 こちらの方がよさそうなので使わしていただきます。 適切な回答ありがとうございました。本当に助かりました。

すると、全ての回答が全文表示されます。

その他の回答 (1)

回答No.1

先ず、自分で対処できないエラーが出力されたときは全て貼り付けるようにしてください。 実行してみましたところ、string index outofbounds exception(インデックスの不正範囲)となりました。 つまり、txtの開始位置がおかしいというものです。 たとえば txt="abcdefghij" であれば、 (1)条件文 txt.substring(0,10).length()=10 となり真になる (2)txtの長さ "10" が出力される (3)beginIndex+=300; により beginIndex=300になる (4)txt.substring(300,10)となり文字列は10文字の長さしかないのに300を参照しようとする ->エラー 以上のようになります。

bell_xxx
質問者

お礼

回答ありがとうございます。 全て貼り付けたいのはやまやまなのですが、文字数制限と自分のソースが汚いので他の人にはわかりづらいかと思いまして、必要な部分だけを載せていました。 少ない情報の中で適切な回答ありがとうございます。 txt.lemgth()は1500くらいなので、大丈夫だと思ってましたが、whileで繰り返した時に最終的に超えてしまいエラーになるのですね。 ありがとうございました。

すると、全ての回答が全文表示されます。

関連するQ&A