【Java】文字列における指定文字の位置を取得する方法
このページでは、JavaのindexOfメソッドを使った文字列内で指定文字や部分文字列が出現する位置の取得方法について詳しく解説します。以下の見出しをクリックすると対応するセクションにジャンプできます。
indexOfメソッドの概要
indexOf
はJavaのString
クラスに含まれるメソッドで、指定した文字や文字列が最初に出現する位置を返します。
基本構文:
int indexOf(int ch) // 文字を検索
int indexOf(String str) // 部分文字列を検索
int indexOf(int ch, int fromIndex) // 指定位置以降から文字を検索
int indexOf(String str, int fromIndex) // 指定位置以降から部分文字列を検索
戻り値は見つかった場合は文字列のインデックス (0から始まる)、見つからない場合は-1
です。
基本的な使い方
まずは基本的な使用例を見てみましょう。
public class Main {
public static void main(String[] args) {
String text = "hello world";
int index = text.indexOf('o'); // 'o'の最初の出現位置を取得
System.out.println(index); // 出力: 4
}
}
この例では、文字列"hello world"
において、'o'
が最初に現れる位置 (4番目) を返します。
部分文字列の検索
部分文字列を検索する場合も、構文は似ています。
public class Main {
public static void main(String[] args) {
String text = "Java programming is fun!";
int index = text.indexOf("programming"); // 部分文字列を検索
System.out.println(index); // 出力: 5
}
}
この場合、"programming"
は5番目のインデックスから始まるため、結果は5
です。
大文字小文字を区別しない検索
indexOf
メソッド自体は大文字小文字を区別しますが、toLowerCase
またはtoUpperCase
を組み合わせることで区別を無効にできます。
public class Main {
public static void main(String[] args) {
String text = "Hello World";
int index = text.toLowerCase().indexOf("world");
System.out.println(index); // 出力: 6
}
}
すべての出現箇所を取得する方法
indexOf
をループで使用することで、文字や部分文字列のすべての出現位置を取得できます。
public class Main {
public static void main(String[] args) {
String text = "abracadabra";
String target = "a";
int index = text.indexOf(target);
while (index != -1) {
System.out.println("Found at: " + index);
index = text.indexOf(target, index + 1);
}
}
}
このコードは"a"
が見つかるすべての位置を出力します。
MathJaxを用いた数式例
文字列内のインデックス検索は以下のような数学的表現で説明できます。
文字列 \( S \) 内で文字 \( c \) の最初の出現位置は、次のように表されます。
\[ \text{indexOf}(S, c) = \min\{i \mid S[i] = c, 0 \leq i < \text{length}(S)\} \]
もし見つからない場合、結果は \(-1\) になります。
よくあるエラーと対処法
- 部分文字列が存在しない場合:
-1
が返されます。この結果をチェックすることが重要です。 - NullPointerException:
indexOf
を呼び出す前に文字列がnull
でないか確認してください。
public class Main {
public static void main(String[] args) {
String text = null;
try {
int index = text.indexOf('a'); // NullPointerExceptionをスロー
} catch (NullPointerException e) {
System.out.println("文字列がnullです。");
}
}
}