【2026年版】Javaのsubstringとは?使い方と実践例で徹底解説
Javaプログラミングで、文字列操作は避けて通れない重要なテーマです。そのなかでも、substringメソッドは特に頻繁に使用される機能の1つです。
本記事では、Javaのsubstringメソッドを、機能や記述方法、そして活用例を交え分かりやすく解説します。
初心者の方からベテランプログラマーまで、substringの真価を理解し、より効率的なコーディングを実現するための参考になれば幸いです。
Contents
Javaのsubstringとは
Javaのsubstringメソッドは、文字列の一部を簡単に切り出すことができます。例えば、長い文章から特定の単語や文を抽出したい場合や、データの一部を取り出したい場合に活用できます。
以下は、substringメソッドの基本的な使い方を示すコードです。
|
String 元の文字列 = “こんにちは、世界!”; String 抽出結果 = 元の文字列.substring(6, 8); System.out.println(抽出結果); // “世界”と出力されます |
上記のようにsubstringメソッドを使えば、文字列の特定の範囲を簡単に取り出すことができます。
substringメソッドの基本構文
substringメソッドには2つの形式があり、目的に応じて使い分けます。
形式1:開始位置のみ指定
|
String 結果 = 文字列.substring(int 開始位置); // 指定した開始位置から文字列の末尾までを抽出 |
形式2:開始位置と終了位置を指定
|
String 結果 = 文字列.substring(int 開始位置, int 終了位置); // 開始位置から終了位置の直前までを抽出(終了位置は含まれない) |
重要なポイントは、終了位置の文字は結果に含まれないことです。これは「半開区間」と呼ばれる仕様で、例えばsubstring(3, 7)はインデックス3, 4, 5, 6の4文字を抽出します。
文字列インデックスの仕組み
Javaでは文字列のインデックスは0から始まります。例えば、文字列”Hello”の場合、
|
文字 |
H |
e |
l |
l |
o |
|
インデックス |
0 |
1 |
2 |
3 |
4 |
「H」は0番目、「o」は4番目として扱われます。0から始まるインデックスは、多くのプログラミング言語で採用されている仕組みです。
substringの引数では、インデックスが文字と文字の「間」を指すと考えれば理解しやすいです。
「間」の考え方により、substring(1, 4)が「インデックス1からインデックス4の間」つまり”ell”を抽出すると理解できます。
Javaのsubstringの魅力
substringメソッドは、文字列の任意の位置から部分文字列を抽出できる汎用性と、他のStringメソッドとの組み合わせによる柔軟性を持っています。
例えば、ログファイルから特定の情報を取り出したり、長い文字列を管理しやすい短い部分に分ける、固定長データから必要な部分だけを切り出すなどの処理はもちろん、他のStringメソッドと組み合わせて特定のパターンに基づいて文字列を処理するなど多様な用途に対応できます。
以下は、パターンに基づいて文字列を処理する例です。
|
String データ = “ID:12345,名前:山田太郎,年齢:30”; String ID = データ.substring(3, 8); String 名前 = データ.substring(データ.indexOf(“名前:”) + 3, データ.indexOf(“,年齢”)); String 年齢 = データ.substring(データ.lastIndexOf(“:”) + 1); System.out.println(“ID: ” + ID); // “12345” System.out.println(“名前: ” + 名前); // “山田太郎” System.out.println(“年齢: ” + 年齢); // “30” |
substringは1つのメソッドでありながら、データの形式や目的に応じて柔軟に対応できます。複雑な正規表現を使わずとも、基本的な文字列操作の多くをカバーできます。
substringで文字列を取り出す基本パターン
substringメソッドの基本的な使い方は、開始位置と終了位置を指定した抽出です。ただし、文字列のインデックスは0から始まるため、最初の文字は0番目として扱われます。
例えば、文字列”Hello, World!“から”World”の部分を抽出したい場合、以下のようにコードを書きます。
|
String 元の文字列 = “Hello, World!”; String 抽出結果 = 元の文字列.substring(7, 12); System.out.println(抽出結果); // “World”と出力されます |
上記コードのように、substringメソッドを使うことで、文字列の一部を簡単に取り出すことができます。
範囲指定から抜き出す
範囲指定から文字列を抜き出す場合、substringメソッドに開始位置と終了位置を指定します。インデックスの指定では、開始位置は含まれますが、終了位置は含まれないことに注意が必要です。
|
substring(開始位置, 終了位置); |
例えば、文字列”プログラミング”から途中部分を抽出したい場合、以下のようにコードを書きます。
|
String 元の文字列 = “プログラミング”; String 抽出結果 = 元の文字列.substring(2, 5); System.out.println(抽出結果); // “グラミ”と出力されます |
上記コードのように、開始位置と終了位置を指定すれば、文字列の特定の範囲を抽出できます。
先頭から抜き出す
文字列の先頭から特定の長さだけ抜き出したい場合、開始位置を0とし、終了位置に抽出したい文字数を指定します。
例えば、文字列”こんにちは世界”から最初の5文字を抽出したい場合、以下のようにコードを書きます。
|
String 元の文字列 = “こんにちは世界”; String 抽出結果 = 元の文字列.substring(0, 5); System.out.println(抽出結果); // “こんにちは”と出力されます |
上記コードのように、先頭からの抽出も簡単にできます。
指定位置から末尾まで抜き出す
特定のインデックスから文字列の末尾までを抽出したい場合、substringメソッドに開始位置のみを指定します。
例えば、文字列”Java programming”の6文字目以降を抽出したい場合、以下のようにコードを書きます。
|
String 元の文字列 = “Java programming”; String 抽出結果 = 元の文字列.substring(5); System.out.println(抽出結果); // “programming”と出力されます |
上記コードのように、開始位置のみを指定すると、指定インデックスから文字列の末尾までを抽出できます。
末尾から指定文字数を抜き出す
文字列の末尾から特定の長さだけ抜き出したい場合、length()メソッドと組み合わせて使用します。
例えば、文字列”プログラミング言語”から最後の2文字を抽出したい場合、以下のようにコードを書きます。
|
String 元の文字列 = “プログラミング言語”; String 抽出結果 = 元の文字列.substring(元の文字列.length() – 2); System.out.println(抽出結果); // “言語”と出力されます |
上記コードのように、length()メソッドを使うことで、文字列の末尾からの抽出も可能です。
indexOfと併用して動的に抜き出す
特定の文字や文字列を基準に抽出したい場合、indexOfメソッドとsubstringメソッドを組み合わせて使用します。
例えば、文字列”Hello, Java World!“から”Java”以降の部分を抽出したい場合、以下のようにコードを書きます。
|
String 元の文字列 = “Hello, Java World!”; int 開始位置 = 元の文字列.indexOf(“Java”); String 抽出結果 = 元の文字列.substring(開始位置); System.out.println(抽出結果); // “Java World!”と出力されます |
上記コードのように、indexOfメソッドで特定の文字列の開始位置を見つけ、開始位置からsubstringメソッドで抽出できます。
ただし、元文字列が、ファイルやユーザーの入力に由来する場合、必ずしも特定の文字列が含まれていないケースもあるため、indexOfメソッドが-1を返す場合(指定した文字列が見つからない場合)の処理は考慮する必要があります。
実践で使えるsubstringの応用例
基本的な使い方を理解したら、実際の開発現場でよく使われるパターンを見ていきましょう。
ファイル拡張子を取得する
ファイル名から拡張子を取得する処理は、ファイルアップロード機能などでよく使われます。
|
String ファイル名 = “document.pdf”; // 最後のドット(.)の位置を見つける int ドット位置 = ファイル名.lastIndexOf(“.”); if (ドット位置 != -1) { // ドットの次の文字から末尾までを抽出して拡張子を取得 String 拡張子 = ファイル名.substring(ドット位置 + 1); System.out.println(“拡張子: ” + 拡張子); // “pdf” } else { System.out.println(“拡張子がありません”); } |
lastIndexOfメソッドで最後のドットの位置を見つけ、その次の文字から末尾までを抽出すると拡張子を取得できます。
CSV形式のデータを分割する
CSV(カンマ区切り)形式のデータを処理する際、substringとindexOfを組み合わせて各項目を抽出できます。
|
String CSVデータ = “田中,30,東京,エンジニア”; int 開始位置 = 0; // 最初のカンマの位置を検索 int カンマ位置 = CSVデータ.indexOf(“,”, 開始位置); // 開始位置からカンマの直前までを抽出して名前を取得 String 名前 = CSVデータ.substring(開始位置, カンマ位置); System.out.println(“名前: ” + 名前); // “田中” // 次の項目の開始位置を設定(カンマの次) 開始位置 = カンマ位置 + 1; カンマ位置 = CSVデータ.indexOf(“,”, 開始位置); String 年齢 = CSVデータ.substring(開始位置, カンマ位置); System.out.println(“年齢: ” + 年齢); // “30” |
ただし、実際のプロジェクトでは、より複雑なCSVを扱う場合にString.split()メソッドや専用ライブラリ(Apache Commons CSVなど)の使用を検討してください。
1文字だけ取得する方法の比較
1文字だけを取得する場合、substringとcharAtの2つの方法があります。
|
String 文字列 = “Hello”; // substringを使う方法:String型として1文字を取得 String 一文字String = 文字列.substring(1, 2); // “e”(String型) // charAtを使う方法:char型として1文字を取得 char 一文字char = 文字列.charAt(1); // ‘e’(char型) |
使い分けのポイントは、取得した1文字をどのように扱うかで決まります。String型として他の文字列と結合する場合はsubstring(n, n+1)、char型として文字判定や比較をおこなう場合はcharAt(n)を使用します。
一般的に、charAt()のほうがメモリ効率が良く処理も高速なため、1文字だけを取得する場合はcharAt()の使用が推奨されます。
substringの注意点とエラー対策
Javaのsubstringメソッドは便利な文字列操作ツールですが、使用する際にはいくつかの注意点があります。適切に使用しないと、予期せぬエラーや非効率なコードにつながる可能性があります。
IndexOutOfBoundsExceptionとNullPointerExceptionの対策
substringメソッドを使用する際は、対象の文字列の内容や長さに十分注意を払う必要があります。特に気をつけるべき点がいくつかあります。
まず、IndexOutOfBoundsExceptionに注意が必要です。このエラーは、指定した開始位置や終了位置が文字列の範囲外にあると発生します。
例えば、以下のようなコードでエラーの起きる可能性があります。
|
String 文字列 = “こんにちは”; String 切り出し = 文字列.substring(10); // IndexOutOfBoundsException |
範囲外のエラーを回避するには、文字列の長さを事前にチェックするとよいでしょう。
|
String 文字列 = “こんにちは”; if (文字列.length() >= 10) { String 切り出し = 文字列.substring(10); } else { System.out.println(“文字列が短すぎます”); } |
また、nullチェックも重要です。nullの文字列に対してsubstringを呼び出すと、NullPointerExceptionが発生します。
|
String 文字列 = null; String 切り出し = 文字列.substring(0, 5); // NullPointerException |
エラーの発生を避けるため、substringを使用する前にnullチェックをおこなうことをおすすめします。特に外部からの入力(ファイル読み込み、ユーザー入力、API通信など)を扱う場合は、必ずnullチェックを実装しましょう。
関連記事:Javaでnullを判定するには?わかりやすい方法を徹底解説
substringを使わないほうがよい場合もある
substringは便利なメソッドですが、常に最適な選択肢とは限りません。場合によっては、他の方法を選択したほうが効率的なこともあります。
例えば、正規表現を使用したほうが効率的な場合もあります。
特定のパターンに基づいて文字列を抽出したい場合、substringよりも正規表現のほうが適しているでしょう。
|
String 文字列 = “123ABC456”; String 数字のみ = 文字列.replaceAll(“[^0-9]”, “”); // “123456” |
上記のコードは、数字以外の文字を空文字列に置換します。結果、“123ABC456”から数字の部分”123456”が抽出されます。
また、大量のデータを処理する場合、substringは新しい文字列オブジェクトを生成するため、メモリ使用量やパフォーマンスに注意が必要です。
substringは便利ですが、常に最適とは限らないことを覚えておきましょう。処理の内容や規模によって、最適な方法を検討してください。
まとめ
Javaのsubstringは文字列操作に欠かせないメソッドです。
範囲指定や先頭・末尾からの抽出など、さまざまな使い方ができます。
ただし、IndexOutOfBoundsExceptionやNullPointerExceptionに注意が必要です。文字列の長さやnullチェックは忘れずに。
substringを使いこなして、プログラミングスキルを向上させましょう。



