MEDIA

メディア

  1. TOP
  2. メディア
  3. プログラミング
  4. Javaの文字列切り出しを完全解説|substring・split・indexOfの使い方

Javaの文字列切り出しを完全解説|substring・split・indexOfの使い方

Javaを用いた開発において、文字列を切り出す処理は避けて通れない基本操作です。

例えば、ユーザー入力のチェック、CSVファイルの解析、APIから返ってきたログデータの抽出など、あらゆる場面で利用されます。

しかし、基本であるはずの substring で範囲指定エラーが出たり、split で意図しない場所で区切られたりと、意外な落とし穴が多いのも事実です。

そこで本記事では、文字列切り出しの全手法を体系的に解説します。

実務で頻出する substringsplit・正規表現の使い分けをマスターし、エラーのない堅牢なコードを書きましょう。

Javaで文字列を切り出す基本|substringの仕組みと使い方

Javaの文字列切り出しにおいて、最も基本かつ頻繁に使われるのが substring() メソッドです。

このメソッドは、「開始位置から終了位置まで」を指定して文字列の一部を抽出します。

基本構文は以下のとおりです。

String result = text.substring(beginIndex, endIndex);

ここで初心者が最も混乱するのが、インデックス(添字)の扱いです。

Javaのルールでは、「beginIndex は含み、endIndex は含まない」という仕様になっています。

例えば、次のコードを見てみましょう。

String text = "ABCDEFG";

// 0文字目(A)から、3文字目(D)の手前まで
String result = text.substring(0, 3);

System.out.println(result); // 結果: "ABC"

このように、substring(0, 3) と指定した場合、取得される文字数は 3 - 0 = 3文字 となります。

「終了位置の数字そのものは含まれない」と覚えておくと、計算ミスを防ぎやすくなります。

さらに、endIndex を省略した場合は、指定位置から末尾までをすべて取得します。

// 3番目(D)から最後まで
System.out.println(text.substring(3)); // 結果: "DEFG"

substringの境界仕様とエラーになりやすいケース

substring を使う際、最も頻発するトラブルが IndexOutOfBoundsException です。

これは、存在しないインデックス位置を指定した場合に発生する例外です。

具体的には、以下のようなケースでアプリケーションがクラッシュします。

String s = "ABC"; // 長さは3

// エラー:5は範囲外
s.substring(0, 5);

// エラー:開始位置がマイナス
s.substring(-1, 2);

// エラー:開始位置が終了位置より大きい
s.substring(2, 1);

実務では、文字列の中身が空(長さ0)であったり、予想より短い文字列が渡ってくることが多々あります。

そのため、安全に切り出すためには、事前に長さチェックを行うのが鉄則です。

int targetLen = 5;
if (text != null && text.length() >= targetLen) {
    System.out.println(text.substring(0, targetLen));
} else {
    // エラーハンドリングまたはそのまま返す
}

詳しい仕様はJava公式ドキュメントのsubstringメソッド解説で確認できます。

条件に応じて部分文字列を取得する方法|split・indexOf・正規表現

単純な位置指定だけでなく、実務では「区切り文字」や「パターン」に応じた柔軟な切り出しが求められます。

ここでは、現場で頻繁に利用される3つの応用テクニックを解説します。

1. splitを使った分割処理と注意点

split() は、カンマやタブなどの区切り文字(デリミタ)で文字列を一括分割するメソッドです。

String csv = "apple,banana,orange";
String[] parts = csv.split(",");
// parts[0] -> "apple"
// parts[1] -> "banana"

しかし、注意が必要なのは splitの引数は正規表現として扱われる という点です。

例えば、ドット(.)やパイプ(|)などの特殊文字で分割しようとすると、期待通りに動きません。

String ip = "192.168.1.1";

// 失敗例:ドットは「任意の文字」を表す正規表現
String[] fail = ip.split(".");

// 成功例:バックスラッシュでエスケープする
String[] success = ip.split("\\.");

したがって、ファイルパスやIPアドレスを扱う際は、必ずエスケープ処理(\)を忘れないようにしましょう。

2. indexOf と substring を組み合わせる

「特定の文字が出てくるまでの部分」や「特定の文字以降」を取得したい場合、indexOfsubstring の組み合わせが最強です。

この方法は、切り出したい位置が固定ではなく、動的に変わる場合に役立ちます。

String data = "user:alice";

// コロンの位置を探す
int pos = data.indexOf(":");

if (pos != -1) {
    // 先頭からコロンの手前まで
    String key = data.substring(0, pos);
    
    // コロンの次の文字から末尾まで
    String value = data.substring(pos + 1);
    
    System.out.println(key);   // "user"
    System.out.println(value); // "alice"
}

JSONライクなデータの解析や、URLのパラメータ処理などで非常に重宝するパターンです。

3. 正規表現を使った高度な抽出

さらに複雑な条件、例えば「ID:の後ろにある数字だけを取り出したい」といった場合は、正規表現クラス(Pattern / Matcher)を使用します。

import java.util.regex.*;

String log = "Error at ID:12345 (Timeout)";
Pattern p = Pattern.compile("ID:(\\d+)");
Matcher m = p.matcher(log);

if (m.find()) {
    // グループ1(カッコの中身)を取り出す
    String id = m.group(1); 
    System.out.println(id); // "12345"
}

正規表現は学習コストがかかりますが、複雑なテキスト解析には不可欠な強力なツールです。

参考:Java公式ドキュメントのPatternクラス仕様

実務でよく使うパターンとベストプラクティス

文字列切り出しは簡単そうに見えて、実務ではバグの温床になりやすい処理です。

そこで、現場のエンジニアが意識しているチェックリストと実装パターンをまとめます。

境界エラーとNullを避けるチェックリスト

コードレビューで指摘されないよう、以下の点を必ず実装前に確認してください。

  • 対象の文字列が null ではないか?
  • index が文字列の長さ(length)を超えていないか?
  • beginIndexendIndex より小さいか?
  • split する際、区切り文字が正規表現特殊文字ではないか?
  • indexOf の戻り値が -1(見つからない)の場合を考慮しているか?

実務で推奨される実装例

以下のコードは、外部からのデータ入力に対して防御的に記述した例です。

複数のチェックを組み合わせることで、システムの安定性を高めています。

public String extractValue(String input) {
    // 1. nullチェック
    if (input == null) {
        return "";
    }
    
    // 2. 目的の区切り文字が含まれているか
    int separatorPos = input.indexOf(":");
    if (separatorPos == -1) {
        return input; // 区切り文字がなければそのまま返す
    }
    
    // 3. 安全に切り出し
    return input.substring(separatorPos + 1).trim();
}

このように、いきなり substring を呼ぶのではなく、事前のチェックと trim()(空白除去)などを組み合わせるのが実務の定石です。

まとめ

Javaの文字列切り出しには複数のアプローチがあり、状況に応じて最適なメソッドを選ぶ必要があります。

本記事の要点を振り返りましょう。

  • substring:位置が明確な場合に使う。「終了位置は含まない」点に注意
  • split:区切り文字で配列化する。ドットなどの特殊文字はエスケープ必須
  • indexOf+substring:特定の文字位置を基準に、動的に切り出す
  • 正規表現:複雑なパターンマッチングや抽出に利用する

特に substring を使用する際は、必ず範囲チェックを行い、IndexOutOfBoundsException を防ぐ設計を心がけてください。

文字列操作はプログラミングの基礎中の基礎ですが、ここを正確に実装できるかどうかが、バグのない高品質なアプリケーション開発への第一歩です。

つまずいたら、現役エンジニアと一緒に解決しよう

Javaの文字列処理やsubstringの境界チェックは、独学では理解が難しい部分です。実務で使えるスキルを身につけたい方は、Zerocode Onlineで体系的に学習してみませんか。

現役エンジニア1on1

substring・split・正規表現の疑問を丁寧にサポート。

実務設計まで網羅

Java/SQL/Spring Bootを体系的に習得。

ポートフォリオ支援

現場で刺さる成果物づくりを伴走。

完全オンライン

忙しくても学習できる環境。

Join us! 未経験からエンジニアに挑戦できる環境で自分の可能性を信じてみよう 採用ページを見る→

記事監修

ドライブライン編集部

[ この記事をシェアする ]

記事一覧へ戻る