javaでsubstringを使って文字列を切り出しする方法を解説!
この記事では、javaでsubstringを使って文字列を切り出しする方法を解説しています。
Javaのsubstring()メソッドは
開始インデックスのみ指定する方法と
開始と終了のインデックス両方を指定する方法
の2種類の使い方が存在します。
今回はsubstring()メソッドの2種類の使い方について、初心者でもわかりやすいサンプルコード付きで解説していきます。
目次
substringとは
Javaのsubstring()メソッドは、指定された文字列を切り出して新しい文字列を返します。
渡されたインデックス(番号)に基づき、指定した文字列を取得するために使用されます。
例えば下記の図のように、”0123456789″という文字列を切り出し”567″にしたい場合に使います。
substringの構文
開始インデックスのみを指定する場合
開始インデックスのみを指定する場合の構文
1 |
String substring(int Index) |
substring()メソッドの構文は2種類あると冒頭でも説明しました。
1つ目は『開始インデックスのみを指定する場合』です。
開始インデックスのみを指定した場合、開始インテックスから最後の文字列まで切り出されます。
例えば、”0123456789″という文字列があり開始インデックスに5を指定した場合”56789″が切り出されます。
開始インデックスと終了インデックスの両方を指定する場合
開始インデックスと終了インデックスの両方を指定する場合の構文
1 |
String substring(int Index, int endIndex) |
2つ目が『開始インデックスと終了インデックスの両方を指定する場合』です。
開始と終了のインデックス両方指定した場合は、指定した開始インデックスから指定した終了インデックスまで切り出されます。
例えば、”0123456789″という文字列に開始インデックスを5終了インデックスを7と指定したとしたら文字列”567″が出力されます。
※注:インデックスは0から始まります。
substringを使った例
開始インデックスのみを指定する場合の例
・開始インデックスのみを指定する場合、指定したインデックスから文字列の最後までの部分文字列を返します。
・インデックスの範囲は0〜xで、xは文字列の長さを表します。
・結果の部分文字列にはインデックス位置の文字が含まれます
・開始位置がゼロより小さいか、指定された文字列の長さ(x)より大きい場合、IndexOutOfBoundsExceptionにスローされます。
・インデックス値X(文字列の長さ)を渡すと、空の文字列が返されます。
1 |
0 <= Index <= X |
開始インデックスのみの部分文字列の例
1 2 3 4 5 6 7 8 9 10 |
public class Main { public static void main(String[] args) throws Exception { System.out.println( "0123456789".substring(0) );// 0123456789 System.out.println( "0123456789".substring(1) );// 123456789 System.out.println( "0123456789".substring(8) );// 89 System.out.println( "0123456789".substring(9) );// 9 System.out.println( "0123456789".substring(10) );// empty string } } |
出力結果
0123456789
123456789
89
9
開始インデックスと終了インデックスの両方を指定する場合の例
・開始インデックスと終了インデックスの両方を指定する場合、指定したインデックスから終了インデックスの位置までの部分を文字列を返します。
・インデックスの範囲は0〜xで、xは文字列の長さです。
・結果の文字列はインデックスの位置の文字を含みますが、終了インデックスの位置の文字は含みません。
・Indexがゼロより小さいか、指定された文字列の長さ(x)より大きい場合IndexOutOfBoundsException場合にスローされます。
・指定された文字列の長さ(x)より値が大きくないとエラーになりませんので注意してください。
・両方のパラメーターに同じインデックスを渡すと、空の文字列が返されます。
1 2 |
0 <= IndexStart <= x Index <= IndexEnd <= x |
開始インデックスと終了インデックスの両方を指定する場合の例
1 2 3 4 5 6 7 8 9 10 11 12 13 |
public class Main { public static void main(String[] args) throws Exception { System.out.println("0123456789".substring(1, 5)); // 1234 System.out.println("0123456789".substring(0, 10)); // 0123456789 System.out.println("0123456789".substring(0, 0)); // empty string System.out.println("0123456789".substring(7, 7)); // empty string System.out.println("0123456789".substring(10, 10)); // empty string System.out.println("0123456789".substring(5, 9)); // 5678 System.out.println("0123456789".substring(9, 10)); // 9 } } |
出力結果
1234
123456789
5678
9
注意!この場合は例外にならない!
先ほども説明しましたが、指定された文字列の長さより値が大きくないとエラーになりませんので下記の例では例外になりませんので注意してください。
1 2 3 4 5 6 7 8 9 |
public class Main { public static void main(String[] args) throws Exception { System.out.println( "0123456789".substring(10) );// empty string System.out.println("0123456789".substring(10, 10)); // empty string System.out.println("0123456789".substring(9, 10)); // 9 } } |
例外の場合の例
開始インデックスのみを指定する場合のエラーの例
1 2 3 4 5 6 7 |
public class Main { public static void main(String[] args) throws Exception { System.out.println( "0123456789".substring(11) ); //java.lang.StringIndexOutOfBoundsException } } |
出力結果
Exception in thread “main” java.lang.StringIndexOutOfBoundsException: String index out of range: -1
at java.base/java.lang.String.substring(String.java:1876)
at Main.main(Main.java:7)
開始インデックスと終了インデックスの両方を指定する場合のエラーの例
1 2 3 4 5 6 7 |
public class Main { public static void main(String[] args) throws Exception { System.out.println("0123456789".substring(9, 11)); // StringIndexOutOfBoundsException } } |
出力結果
at java.base/java.lang.String.checkBoundsBeginEnd(String.java:3720)
at java.base/java.lang.String.substring(String.java:1909)
at Main.main(Main.java:7)
Ryotin
現役フリーランスエンジニアです。使ってるエージェントはフライテック!得意言語はJava。月収は75万円。SESのフリーランスではこれ以上稼ぐのは厳しそう...とはいってもサラリーマンの時より倍の収入だから家族も喜んでるけどね!