JavaでStringIndexOutOfBoundsException(非検査例外)を処理する方法
StringIndexOutOfBoundsExceptionは、Javaにおける非検査例外(unchecked exception)の一つです。文字列は文字の集合体であり、Stringオブジェクトが持つ有効なインデックス範囲は [0、文字列の長さ] です。実際の文字列の範囲を超えて文字へアクセスしようとした場合に、この例外が発生します。
例1:例外が発生するケース
public class StringDemo {
public static void main(String[] args) {
String str = "Welcome to Tutorials Point.";
System.out.println("Length of the String is: " + str.length());
System.out.println("Length of the substring is: " + str.substring(28));
}
}実行結果
Length of the String is: 27
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 28
at java.lang.String.substring(String.java:1931)
at StringDemo.main(StringDemo.java:6)この例では、文字列の長さは27であるにもかかわらず、substring(28)によって28番目以降の部分文字列を取得しようとしているため、例外がスローされます。
StringIndexOutOfBoundsExceptionへの対処方法
- String.length()メソッドを使って事前に文字列の長さを確認し、その範囲内でのみ文字や部分文字列にアクセスするようにします。
- try-catchブロックで、StringIndexOutOfBoundsExceptionがスローされる可能性のあるコードを囲み、例外を捕捉して適切に処理します。
例2:try-catchによる例外処理
public class StringIndexOutOfBoundsExceptionTest {
public static void main(String[] args) {
String str = "Welcome to Tutorials Point.";
try {
// strの長さは27のため、charAt(28)はStringIndexOutOfBoundsExceptionをスローする
str.charAt(28);
System.out.println("String Index is valid");
} catch (StringIndexOutOfBoundsException e) {
System.out.println("String Index is out of bounds");
}
}
}実行結果
String Index is out of bounds
このように、charAt()やsubstring()などインデックスを扱うメソッドを使用する際は、あらかじめlength()で文字列の長さを確認するか、try-catchで例外処理を行うことで、プログラムの異常終了を防ぐことができます。
-
JavaのGsonで@SerializedNameアノテーションを使ってJSONプロパティ名を変更する方法
JavaのオブジェクトをJSONに変換する際、クラスのフィールド名とは異なるプロパティ名で出力したいケースはよくあります。そんなときに役立つのが、Gsonが提供する@SerializedNameアノテーションです。このアノテーションを付与すると、シリアライズ(JSONへの変換)・デシリアライズ(JSONからの復元)の両方において、指定した名前がフィールド名として使用されます。なお、@SerializedNameはGsonインスタンスに設定されたデフォルトの命名ポリシーを含む、あらゆるFieldNamingPolicyを上書きします。命名ポリシー自体を切り替えたい場合は、GsonBuilderク
-
JavaのStringIndexOutOfBoundsExceptionとは?発生原因と対処法をわかりやすく解説
StringIndexOutOfBoundsExceptionとはJavaにおいて、文字列(String)は一連の文字を格納するために使用され、オブジェクトとして扱われます。文字列は、java.langパッケージに含まれるStringクラスによって表現されます。文字列の作成方法は主に2つあります。1つは他のオブジェクトと同様にnewキーワードを使用する方法、もう1つはプリミティブ型のようにリテラルを直接代入する方法です。String stringObject = new String(Hello how are you); String stringLiteral = Welcome to T