プログラムが動かない
次のプログラムを実行したところコンソールに赤いメッセージが表示されてしまいました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
package moji; import java.util.Scanner; public class Moji { public static void main(String[] args) { // TODO 自動生成されたメソッド・スタブ System.out.println("文字を入力してください"); Scanner scan = new Scanner(System.in); String moji = scan.next(); int kazu = moji.length(); System.out.println("入力文字数は"+kazu + "文字です。"); String moji2 = moji.replace("です。","だなも。"); System.out.println(moji2); int ichi = moji.indexOf("「"); String moji3 = moji.substring(ichi+1,ichi+20); System.out.println(moji3); } } |
プログラムが異常終了しているため赤いメッセージが表示されています。異常終了している原因の手掛かりがメッセージにあります。まず①「 at moji.Moji.main(Moji.java:20)」で終了している場所がわかります。この場合はMoji.javaの20行目です。
20 |
String moji3 = moji.substring(ichi+1,ichi+20); |
次に②「java.lang.StringIndexOutOfBoundsException」で異常終了の種類がわかります。といっても日本語でないのでわかりづらいですが、「OutOfBounds」から何か範囲を超えているようです。
20行目を見るとsubstringのかっこ()の指定で終了位置が「ichi+20」になっています。あきらかに抽出対象の文字列より大きい数値が終了位置に指定されています。これが原因だったようです。
コンソールに赤いメッセージが表示されプログラムが止まってしまった場合は、まず止まった場所を特定してください。そして該当箇所前後のプログラムに問題がないか確認してください。また異常終了の種類も参考にしてみてください。