MEDIA

メディア

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

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

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

JavaのindexOfは、文字列やリストの中から「指定した要素が最初に現れる位置」を取得するメソッドです。

戻り値は一致した要素そのものではなく、位置(インデックス)を表すint値になります。

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

このように、eが見つかった位置「1」が返ります。

indexOfの重要ポイント

  • 返すのは「場所(位置)」
  • 見つからない場合は -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の列数推定
  • 入力妥当性チェック

などに使われます。

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

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

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

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

記事監修

ドライブライン編集部

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

記事一覧へ戻る