javaのsubstringとは?基本と応用の利用方法を解説

エンジニア
マネージャー
substringとは?
substringは、java.lang.Stringクラスに存在するメソッドの1つです。引数として切り出したい文字のインデックスを指定します。切り出される文字列は指定されたインデックスから始まり、終了インデックスより1文字前、または文字列の最後までを切り出します。インデックスを指定する場合に注意していただきたいのは、1文字目のインデックスが0になるということです。これは配列などと同じ考え方であり、javaでインデックスを利用する場合にはどのクラスでも0始まりとなります。普段認識しているように、1から数えてしまうと求めている文字列を切り出すことができないため、この点に関してはしっかりと把握しておきましょう。インデックスに指定された値が元の文字列の長さを超えていた場合は、IndexOutOfBoundsExceptionが発生します。また、開始インデックスが終了インデックスより大きい場合も同様に、IndexOutOfBoundsExceptionが発生します。
substringの利用方法
substringには、引数を1つだけ指定した場合と、2つ指定する場合で2パターンの利用方法があります。それぞれ、以下のような内容となっています。
・開始インデックスのみを指定する場合
・開始インデックス、終了インデックスを指定する場合
これは、切り出したい文字の長さによって変更することになります。javaでは、開始インデックス、終了インデックスともに0始まりの値を指定することになります。それでは、それぞれの使い方をご説明していきます。
開始インデックスのみを指定する場合
開始インデックスのみを指定する場合のsubstringメソッドは、以下のように記述します。文字列.substring(開始インデックス)開始インデックスのみを指定すると、文字列は開始インデックスから文字列の最後の文字までが切り出されます。例えば、文字列「あいうえおかきくけこ」から「かきくけこ」のみを切り出したい場合は、以下のようにします。
1 2 3 4 5 6 |
public class Main { public static void main(String[] args) { String test = "あいうえおかきくけこ"; // 「かきくけこ」を切り出す System.out.println(test.substring(5)); } } |
実行結果
1 |
かきくけこ |
開始インデックスのみを指定すると、開始インデックスから最後の文字までが切り出されていることが確認できます。この開始インデックスを文字の長さを超えて指定すると、エラーが発生します。また、開始インデックスに負の値を指定した場合もIndexOutOfBoundsExceptionが発生します。
開始インデックス、終了インデックスを指定する場合
開始インデックス、終了インデックスの両方を指定する場合のsubstringメソッドは、以下のように記述します。文字列.substring(開始インデックス, 終了インデックス)開始インデックス、終了インデックスの両方を指定すると、開始インデックスから終了インデックス-1までの文字列を取得します。ここで注意しなければならないのは、開始インデックスに指定された場所の文字列は切り出された文字列に含まれますが、終了インデックスに指定された文字列は含まれないということです。以下のコードで動きを確認してみましょう。
1 2 3 4 5 6 7 8 9 |
public class Main { public static void main(String[] args) { String test = "あいうえおかきくけこ"; // 「かきくけこ」を切り出す System.out.println(test.substring(5, 10)); // 終了インデックスを9にした場合 System.out.println(test.substring(5, 9)); } } |
実行結果
1 2 |
かきくけこ かきくけ |
文字列「あいうえおかきくけこ」で、かきくけこを切り出そうとした場合、「こ」のインデックスは9の為、終了インデックスを9と指定してしまいがちです。しかしながら、javaのsubstringでは、終了インデックスに指定された文字は切り出された文字には含まれません。そのため、この場合は10を指定することになります。開始インデックスに負の値を指定した場合や、終了インデックスが開始インデックスより小さな値だった場合、終了インデックスが文字列の長さより大きかった場合にはIndexOutOfBoundsExceptionが発生します。
応用:indexOfと併用する
substringを利用したいけれどインデックスの場所がわからない場合、文字列の長さがわからない場合には、javaでは同じStringクラスに用意されているindexOfを併用すると解決します。例えば、「あいうえお」の中で「え」から先を切り出したい場合は以下のようになります。
1 2 3 4 5 6 7 |
public class Main { public static void main(String[] args) { String test = "あいうえお"; // 「え」を切り出す System.out.println(test.substring(test.indexOf("え"), test.indexOf("え") + 1)); } } |
実行結果
1 |
え |
indexOfは文字列の中から指定された文字列を検索し、先頭を0としてインデックスを返します。そのため、開始インデックスはそのまま利用することが可能です。しかし、javaのsubstringでは、終了インデックスに指定されたインデックスの文字が含まれないため、+1をして1つ分インデックスをずらして指定することになります。また、indexOfは一致する文字列が無かった場合、-1を返します。これを利用することにより、エラーを回避することが可能です。以下のコードで確認してみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
public class Main { public static void main(String[] args) { String test1 = "あいうえお"; String test2 = "かきくけこ"; int intTest1 = test1.indexOf("え"); int intTest2 = test2.indexOf("え"); // intTest1に格納されている値が負の値ではないことを確認する if (intTest1 > 0) { // 「え」を切り出す System.out.println("test1:" + test1.substring(intTest1, intTest1 + 1)); } else { System.out.println("test1:「え」が含まれていない"); } // intTest2に格納されている値が負の値ではないことを確認する if (intTest2 > 0) { // 「え」を切り出す System.out.println("test2:" + test2.substring(intTest2, intTest2 + 1)); } else { System.out.println("test2:「え」が含まれていない"); } } } |
実行結果
1 2 |
test1:え test2:「え」が含まれていない |
このように、substringとindexOfをうまく利用することで、様々なことができるようになります。
エンジニア
マネージャー
substringメソッドの使い方を覚えよう
javaで部分文字列を切り出すsubstringは、頻繁に利用されるメソッドの1つです。文字列操作の基本と言っても過言ではありません。そんなsubstringメソッドの使い方をしっかりと覚えておけば、実務でも活用することが可能です。今回はindexOfを交えた利用方法をご紹介しました。この利用方法を覚えておけば、様々な場面でsubstringを活用していけるでしょう。まずは実際にsubstringを利用したプログラムを作ってみてください。いろいろ工夫して、プログラムを作ってみましょう。
FEnetJava・Javaコラムは株式会社オープンアップシステムが運営しています。
株式会社オープンアップシステムはこんな会社です
秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
数多くのエンジニアが集まります。

-
スマホアプリから業務系システムまで
スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。
-
充実した研修制度
毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。
-
資格取得を応援
スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。
-
東証プライム上場企業グループ
オープンアップシステムは東証プライム上場「株式会社オープンアップグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
株式会社オープンアップシステムに興味を持った方へ
株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。


Java新着案件New Job
官公庁向け業務システム開発/Java/東京都千代田区/【WEB面談可】/テレワーク
月給39万~44万円東京都千代田区(永田町駅)販売管理システム開発/Java/東京都中央区/【WEB面談可】/テレワーク
月給49万~55万円東京都中央区(京橋駅)生命保険会社向けシステム開発/Java/東京都千代田区/【WEB面談可】/テレワーク
月給42万~48万円東京都千代田区(大手町駅)社会保険システムのパッケージ開発/Java/東京都港区/【WEB面談可】/テレワーク
月給42万~48万円東京都港区(新橋駅)金融機関向けシステム更改/Java/東京都江東区/【WEB面談可】/テレワーク
月給46万~51万円東京都江東区(豊洲駅)大手通信会社者向けWebシステム改修/Java/東京都港区/【WEB面談可】/テレワーク
月給42万~48万円東京都港区(品川駅)