JavaのStringクラスのsubstringメソッドを完全解説!初心者でもわかる文字列操作
生徒
「Javaで文字列の一部だけを取り出す方法ってありますか?」
先生
「良い質問ですね!Javaでは、Stringクラスのsubstringメソッドを使って、簡単に文字列の一部分を取り出すことができます。」
生徒
「具体的にはどのように使うんですか?」
先生
「それでは、基本的な使い方を見ていきましょう!」
1. substringメソッドとは?
「1. substringメソッドとは?」の重要ポイントを、初心者の方にも分かりやすく簡潔に解説します。
substringは、文字列の「必要な部分だけ」を取り出すための基本メソッドです。文章の冒頭だけ見せたい、特定の位置から後ろを切り出したい、といった日常的な処理で活躍します。文字の数え方は左から順に「0, 1, 2, …」と数える0始まりで、取り出しの終わり側は「その直前まで(終端は含まない)」というルールです。この2点を押さえるだけで、substringの多くの操作は迷わず書けるようになります。
まずは雰囲気をつかむために、よくある挨拶文から一部を抜き出してみましょう。前半だけ取りたい、カンマ以降を丸ごと欲しい、といった要望を数行で表現できます。
public class IntroSubstring {
public static void main(String[] args) {
String text = "Hello, World!";
// 先頭(0)から5文字分 → "Hello"
String head = text.substring(0, 5);
// 7文字目(カンマと空白の直後)から最後まで → "World!"
String tail = text.substring(7);
System.out.println(head);
System.out.println(tail);
}
}
Hello
World!
このように、substring(開始位置, 終了位置)は「開始位置を含み、終了位置は含まない」区間を取り出します。終了位置を省略してsubstring(開始位置)と書けば、そこから文字列の終わりまでを一気に取得できます。たとえば「東京都千代田区」という文字列で「東京都」だけ取りたい場合はsubstring(0, 3)、後半の「千代田区」を取りたい場合はsubstring(3)のように書けます。まずは「0から数える」「終わりは含まない」を指でなぞりながら確認してみるのがおすすめです。
2. substringメソッドの基本的な使い方
substringには2種類の呼び出し方があります。どちらも「左から0,1,2…と数える0始まり」で位置を指定します。もう一つ大切なルールは、substring(開始, 終了)の「終了」は含まれないという点です。つまり「開始を含み、終了の直前まで」を切り出します。まずはこの2点をしっかり押さえましょう。
substring(int beginIndex):beginIndexから最後までを取得します。substring(int beginIndex, int endIndex):beginIndex(含む)〜 endIndex(含まない)を取得します。
最小の例から確認します。インデックスのイメージをコメントで示しています。
public class BasicSubstring {
public static void main(String[] args) {
String s = "Hello, World!";
// インデックス: 0 1 2 3 4 5 6 7 8 9 10 11 12
// 文字: H e l l o , W o r l d !
// 1) 先頭から5文字(0〜5の手前) → "Hello"
String a = s.substring(0, 5);
// 2) 7文字目から最後まで(7〜終わり) → "World!"
String b = s.substring(7);
// 3) カンマと空白(5,6)を除いた "Hello" と "World" の間だけ → " World"
String c = s.substring(5, 12); // 5は「,」、12は「!」の直前まで
System.out.println(a);
System.out.println(b);
System.out.println(c);
}
}
Hello
World!
, World
日本語の文字列でも同じ感覚で扱えます。たとえば「東京都千代田区」を「東京都」「千代田区」に分けたい場合は、見たい位置で素直に切り分けます。
public class JapaneseSubstring {
public static void main(String[] args) {
String place = "東京都千代田区";
// 0〜3の手前 → "東京都"
String pref = place.substring(0, 3);
// 3から最後まで → "千代田区"
String city = place.substring(3);
System.out.println(pref);
System.out.println(city);
}
}
東京都
千代田区
「どこからどこまで」を毎回数えるのが不安な場合は、次の2つのコツが役立ちます。
- 終了は含まれないので、ちょうど区切りたい位置を「終点」として指定すると覚えやすい(例:0〜5で先頭5文字)。
- 開始と終了が同じだと空文字(長さ0)が返るので、「何も取らない」指定が可能。
もう少しだけ応用例です。名前の苗字と名前を、固定の区切り位置で抜き出します(実務では可変長のこともありますが、ここでは基本操作の練習として固定で扱います)。
public class NameSplitFixed {
public static void main(String[] args) {
String full = "山田太郎";
// 苗字は先頭2文字、名前は3文字目以降という前提
String family = full.substring(0, 2);
String given = full.substring(2);
System.out.println(family + " / " + given); // → 山田 / 太郎
}
}
山田 / 太郎
ここまでのポイントをまとめると、「0始まり」「終了は含まない」「開始だけ指定すれば末尾まで」がsubstringの基本です。まずは短い単語や地名で手を動かして、狙った位置で切り出せる感覚をつかみましょう。
3. substringメソッドの例
ここでは、substringの典型パターンを段階的に試します。まずは英字の例、そのあと日本語や実用寄りの例(氏名の切り出し・マスク、拡張子の取得)で「どこからどこまで」を体で覚えましょう。すべて0始まり・終了は含まないというルールに沿っています。
基本:先頭の一部と途中から末尾まで
public class SubstringExampleBasic {
public static void main(String[] args) {
String msg = "Hello, World!";
// 0〜5の手前 → 先頭5文字
String head = msg.substring(0, 5); // "Hello"
// 7文字目から最後まで
String tail = msg.substring(7); // "World!"
System.out.println(head);
System.out.println(tail);
}
}
Hello
World!
「終了は含まない」ので、(0, 5)は0〜4文字目を意味します。(7)のように開始だけ渡すと、その位置から末尾まで一気に取得できます。
日本語:地名を前半・後半に分ける
public class SubstringExampleJP {
public static void main(String[] args) {
String place = "東京都千代田区";
String pref = place.substring(0, 3); // "東京都"
String ward = place.substring(3); // "千代田区"
System.out.println(pref);
System.out.println(ward);
}
}
東京都
千代田区
固定の区切り位置がわかっていれば、インデックスを素直に指定するだけでOKです。
実用1:氏名の一部マスク(先頭1文字だけ見せる)
public class SubstringMaskName {
public static void main(String[] args) {
String name = "山田太郎";
// 先頭1文字 + 残りを"*"で埋める
String head = name.substring(0, 1); // "山"
String masked = head + "***";
System.out.println(masked); // "山***"(表示用の簡易例)
}
}
山***
「先頭だけ取り出す→後ろを伏せ字にする」という定番処理も、substringでシンプルに書けます。
実用2:ファイル名から拡張子を取り出す
public class SubstringFileExt {
public static void main(String[] args) {
String filename = "report_2025_final.pdf";
int dot = filename.lastIndexOf(".");
// ドットが見つかったら、その直後から末尾を拡張子として取得
String ext = (dot >= 0) ? filename.substring(dot + 1) : "";
System.out.println(ext); // "pdf"
}
}
pdf
拡張子のように「区切り文字の直後から末尾まで」を取りたい場面は多いです。位置がわかれば、substring(位置+1)で一直線に取り出せます。
実用3:固定幅のIDから部分を抽出
public class SubstringFixedId {
public static void main(String[] args) {
String id = "USR-2025-000123";
// "USR"部分
String prefix = id.substring(0, 3);
// 年(4文字)は 4〜8の手前(ハイフン含むので位置を数えて指定)
String year = id.substring(4, 8);
// 末尾の連番は最後のハイフンの直後から
int lastDash = id.lastIndexOf("-");
String serial = id.substring(lastDash + 1);
System.out.println(prefix + " / " + year + " / " + serial);
}
}
USR / 2025 / 000123
この章のポイントは「0始まり・終了は含まない・開始だけ指定で末尾まで」。まずは短い文字列で手を動かし、欲しい範囲を正確に切り出せる感覚を身につけましょう。
4. substringの使いどころと注意点
「4. substringの使いどころと注意点」の重要ポイントを、初心者の方にも分かりやすく簡潔に解説します。
プログラミングでsubstringメソッドを使うと、ファイル名の一部を取り出したり、URLのドメイン部分を抽出したりと、様々な場面で活用できます。
ただし、注意すべき点として、substringメソッドで無効なインデックスを指定するとStringIndexOutOfBoundsExceptionというエラーが発生します。例えば、文字列の長さを超えたインデックスを指定するとエラーになります。こうしたエラーを防ぐため、事前に文字列の長さを確認することが重要です。
public class SafeSubstringExample {
public static void main(String[] args) {
String text = "Java Programming";
int length = text.length();
if (length >= 10) {
System.out.println(text.substring(0, 10)); // 文字列が10文字以上ある場合
} else {
System.out.println("文字列が短すぎます。");
}
}
}
このように、length()メソッドと組み合わせることで、安全にsubstringを使用することができます。
5. まとめ
本記事では、JavaのStringクラスのsubstringメソッドについて詳しく解説しました。このメソッドを使うことで、文字列の一部分を簡単に抽出できることがわかりました。例えば、ファイル名やURLの一部を取り出したり、文字列データを効率的に操作することが可能です。基本的な使い方から、エラー回避のための注意点まで解説しましたが、初心者の方でも応用できるように理解を深めることが重要です。
特に、substringメソッドは日常的なプログラムにおいて多くのシーンで活躍します。文字列の長さを超えるインデックスを指定するとエラーになるため、length()メソッドを活用して安全に操作する方法を習得しましょう。
また、この記事で紹介したコード例を自分で試してみることで、実際にどのように動作するのかを確認できます。実践を通して学ぶことで、文字列操作に関する知識をより深めることができます。
生徒
「substringメソッドについてよくわかりました!ファイル名や文字列の一部を取り出すのに便利そうですね。」
先生
「その通りです。例えば、ユーザーが入力したテキストの特定部分を取り出すといった実用的なシナリオで役立ちますね。」
生徒
「でも、インデックスを間違えるとエラーになる可能性があるんですよね?」
先生
「そうです。だからこそ、length()メソッドで文字列の長さを確認したり、条件分岐を使って安全に処理することが重要です。」
生徒
「わかりました!エラーを防ぐためのコードも実践してみます。」
先生
「いいですね。substringをマスターすれば、文字列処理が一層楽しくなりますよ。」