MEDIA

メディア

  1. TOP
  2. メディア
  3. プログラミング
  4. JavaのindexOf完全ガイド|基礎から実務での使い分けまで解説

JavaのindexOf完全ガイド|基礎から実務での使い分けまで解説

文字列検索メソッドの全体像

Javaには複数の検索手段があります。まずは役割の違いを整理しましょう。

主要メソッドの使い分け

目的 メソッド 特徴
存在チェック contains true / falseだけ返す
位置取得 indexOf 最初の位置を返す
後ろから検索 lastIndexOf 最後の位置を返す
複雑な条件 正規表現 柔軟だがやや重い

具体イメージ

String s = "hello@example.com";

s.contains("@"); // true
s.indexOf("@"); // 5
s.lastIndexOf(".");// 13

どれを選べばいい?

  • 条件分岐だけ → contains
  • 切り出ししたい → indexOf
  • 拡張子など後ろ基準 → lastIndexOf
  • パターン検索 → 正規表現

👉 最初に全体像を持つと理解が速い

👉 実際に試すと違いがすぐ分かります

ZeroCodePLUSで手を動かして確認するのがおすすめです

indexOfとは?何を返すメソッドなのか

indexOfは、

指定した要素の「位置」を返すメソッドです。

基本例

String s = "hello";
int pos = s.indexOf("e"); // 1

重要ポイント

  • 返すのは「位置(int)」
  • 見つからない → -1
  • 0始まり

なぜ位置が重要?

位置が分かることで・・・

  • substringで切り出し
  • 次の検索開始位置にする
  • 条件分岐に使う

👉 文字列処理の土台になる

containsとの使い分け

目的 推奨メソッド
存在するかだけ知りたい contains
位置が必要 indexOf
if (s.contains("@")) {
 ・・・// 可読性が高い
} 

正規表現との違い

indexOf連続した完全一致のみを対象とします。

柔軟なパターン検索が必要な場合は、Pattern / Matcherを使います。

インデックスの考え方と-1の扱い

0始まりのインデックス

Javaの文字列は0始まりです。

文字 A B C D E
index 0 1 2 3 4

length()文字数であり、最後のインデックスではありません。

見つからない場合は-1

int pos = s.indexOf("xyz"); // -1

これは例外ではなく、正常な戻り値です。

-1チェックを怠ると起きる事故

// 危険な例
String sub = s.substring(s.indexOf("=") + 1);

=がなければ -1 + 1 = 0 となり、

意図しない文字列や例外につながります。

安全な書き方

int pos = s.indexOf("=");
if (pos < 0) {
    return; // or エラー処理
}
String value = s.substring(pos + 1);

String.indexOfの基本的な使い方

charを検索する

String s = "hello";
int pos = s.indexOf("e"); // 1
  • 1文字検索はchar指定が最も読みやすい
  • Unicodeコードポイントとして扱われる

文字列を検索する

String s = "banana";
int pos = s.indexOf("na"); // 2
  • 戻り値は「一致が始まる位置」
  • 日本語も問題なく扱える

fromIndexで開始位置を指定する

String s = "banana";
int first = s.indexOf("na"); // 2
int second = s.indexOf("na" , 3); // 4

2回目以降の検索や、

複数出現の列挙に必須の機能です。

大文字・小文字の違い

indexOf大文字小文字を区別します。

"Java".indexOf("java"); // -1

対策例

s.toLowerCase(Locale.ROOT) 
 .indexOf(target.toLower(Locale.ROOT));

lastIndexOfと複数出現の探索パターン

lastIndexOfの使いどころ

String file = "archive.tar.gz";
int pos = file.lastIndexOf('.'); // 最後のドット

末尾基準の区切りを扱うときに最適です。

複数回出現する位置をすべて取得する

String s = "banana";
String target = "na";
int start = 0;
while (true) {
 int pos = s.indexOf(target, start);
 if (pos < 0) break;
 System.out.println(pos);
 start = pos + 1; // 重なりを許す
}
重なり startの更新
許す pos + 1
許さない pos + target.length()

出現回数を数える

int count = 0;
int start = 0;

while ((start = s.indexOf("," , start)) >= 0) {
 count++;
 start++;
}
  • CSVの列数推定
  • 入力妥当性チェック

などに使われます。

👉 エラーは実際に体験すると理解が深まります

ZeroCodePLUSで再現→修正まで試すのがおすすめです

実務でよくある活用例と落とし穴

substringと組み合わせた抽出

「キー=値」の分解

String s = "token=abc=def";
int pos = s.indexOf('=');

if (pos >= 0) {
 String key = s.substring(0, pos);
 String value = s.substring(pos + 1);
}

splitよりも

意図が明確で壊れにくい実装です。

substringについてはぜひこちらの記事もご参考ください!

List / 配列でのindexOf

List<String> list = Arrays.asList("A", "B", "C");
int pos = list.indexOf("B"); // 1
  • equalsで一致判定
  • 見つからない場合は-1

自作クラスはequals/hashCode必須

NullPointerException対策

if (s == null) {
 return;
}
int pos = s.indexOf("x");
  • 外部入力は必ずnullを想定
  • ガード節で早期return

NullPointerExceptionについてはぜひこちらの記事もご参考ください!

学習を加速させるなら

indexOfは理解より「慣れ」が重要です。

よくある壁
  • -1の扱いでミス
  • substringと組み合わせて混乱
  • 実務イメージが湧かない

👉 これらは手を動かすと解決します

ZeroCodePLUSの活用
  • 環境構築不要
  • ブラウザですぐ実行
  • 失敗しながら学べる

👉 知識を「使えるスキル」に変えましょう

まとめ

  • indexOfは「位置」を返すメソッド
  • 0始まり、見つからない場合は-1
  • fromIndexで複数出現を扱える
  • substringと組み合わせて初めて実務で活きる
  • ListやStringBuilderでも同じ発想で使える

indexOfを正しく扱えるようになると、文字列処理の事故は確実に減ります。

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

記事監修

ドライブライン編集部

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

記事一覧へ戻る