HOWTO · Java

Java.Lang.StringIndexOutOfBoundsException: String Index Out of Range を修正

このチュートリアルでは、スレッド メイン java.lang.StringIndexOutOfBoundsException: string index out of range: 0 error in Java の例外を示します。

このページの内容

このチュートリアルでは、Java の Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 0 エラーについて説明します。

java.lang.StringIndexOutOfBoundsException: String index out of range エラーを修正する

StringIndexOutofBoundsException は、インデックスが負であるか、文字列の長さを超えている文字列の文字にアクセスするときに発生する未チェックの例外です。 この例外は、String にない文字にアクセスしようとしている charAt() メソッドを使用した場合にもスローされます。

StringIndexOutofBoundsException は未チェックの例外であるため、メソッドまたはコンストラクターのスローに追加する必要はありません。 try-catch ブロックを使用して処理できます。 この例外が発生する可能性がある特定のシナリオは次のとおりです。

  1. String.charAt(int index) を使用すると、指定された文字列インデックスの文字が返されます。 インデックスが負の値または文字列の長さより大きい場合、StringIndexOutofBoundsException. がスローされます。
  2. 指定された引数を持つ文字列を返す String.valueOf(char[] data, int offset, int count) を使用する場合。 インデックスが負の場合、または offset + count が配列のサイズより大きい場合、StringIndexOutofBoundsException がスローされます。
  3. 文字列を返す CharSequence.subSequence(int beginIndex, int endIndex) を使用する場合。 beginIndex が endIndex より大きいか、endIndex が文字列の長さより大きい場合、StringIndexOutofBoundsException がスローされます。
  4. 指定された文字列から部分文字列を返す String.substring(int beginIndex) を使用する場合。 beginIndex が負の場合、または文字列の長さより大きい場合、StringIndexOutofBoundsException がスローされます。
  5. String.substring(int beginIndex, int endIndex) を使用すると、特定の範囲内の部分文字列が返されます。 いずれかのインデックスが負の場合、または endIndex が beginIndex の文字列の長さよりも大きく、endIndex よりも大きい場合、StringIndexOutofBoundsException をスローします。

StringIndexOutofBoundsException の例を試してみましょう。 例を参照してください:

package delftstack;

public class Example {
  public static void main(String[] arg) {
    String DemoStr = "delftstack";
    System.out.println(DemoStr.charAt(11));
  }
}

上記のコードは、インデックス 11 に文字がないため、StringIndexOutofBoundsException をスローします。出力を参照してください。

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 11
    at java.base/java.lang.StringLatin1.charAt(StringLatin1.java:48)
    at java.base/java.lang.String.charAt(String.java:1512)
    at delftstack.Example.main(Example.java:7)

StringIndexOutOfBoundsException は、try-catch ブロックを使用して処理できます。 解決策を参照してください:

package delftstack;

public class Example {
  public static void main(String[] arg) {
    String DemoStr = "delftstack";
    try {
      System.out.println(DemoStr.charAt(11));
    } catch (StringIndexOutOfBoundsException e) {
      System.out.println("Please insert a index under String length: " + DemoStr.length());
    }
  }
}

上記のコードの出力は次のようになります。

Please insert a index under String length: 10