【Java】indexOfで複数検索を実行する方法

この記事ではJavaのindexOfで複数検索を実行する方法について解説します。
JavaでindexOf()メソッドは以下の処理を行います。
| indexOf()メソッド | 前方から文字列を検索し、最初にヒットした文字列のインデックスを返します。 ヒットしない場合は、-1を返します。 第2引数を指定した場合、指定したインデックス以降の文字列を検索します。 |
複数検索を実施する場合は、繰り返し処理を実施する必要があります。サンプルプログラムではwhile文を使用します。
第2引数に設定する値は、1回目に検索できた値+検索文字数を指定することで1回目の検索後から再建策できます。
// 検索結果格納用のリスト
List<Integer> list= new ArrayList <>();
// 検索実施文字列
String 文字列 = "abcdabcdabcdabcdaabcabc";
// 検索実施文字列の長さ
int 文字列Len = 文字列.length();
// 検索文字
String 検索文字 = "bc";
// 検索文字数
int 検索文字数 = 検索文字.length();
// 初期値i = 0にて先頭から検索、
// 検索文字が存在した場合は検索文字数を加算して保持
int i = 0;
while(true) {
// 検索文字の長さが検索位置+検索文字数以上の場合、indexOfで検索
if( 文字列Len >= i + 検索文字数) {
int 位置 = 文字列.indexOf(検索文字, i);
// -1 == 位置の場合、文字列検索でヒットしなかった場合のため、処理を終了する
if ( -1 == 位置) {
break;
// -1 以外の場合、文字列検索でヒットしたため、リストに位置を加える
// 変数 iは今回ヒットした位置以降で検索したいため
// 位置 + 検索文字数を代入する
} else {
i = 位置 + 検索文字数;
list.add(位置);
}
// 検索文字の長さが検索位置+検索文字数未満の場合、処理を終了する
} else {
break;
}
}
// 該当したすべての検索文字の位置を出力
System.out.println(list);
// 該当したすべての検索文字がいくつあるか個数を出力
System.out.println(list.size());
// 実行結果
[1, 5, 9, 13, 18, 21]
6
上記サンプルプログラムでは、文字列 = “abcdabcdabcdabcdaabcabc” から”bc”はどの位置にあるか※[1, 5, 9, 13, 18, 21]、何個存在するか※6についてをindexOf()およびwhile文にて実装できることを確認できました。
検索文字列がカラの場合であっても問題ない
// 検索結果格納用のリスト
List<Integer> list= new ArrayList <>();
// 検索実施文字列
String 文字列 = "";
// 検索実施文字列の長さ
int 文字列Len = 文字列.length();
// 検索文字
String 検索文字 = "bc";
// 検索文字数
int 検索文字数 = 検索文字.length();
// 初期値i = 0にて先頭から検索、
// 検索文字が存在した場合は検索文字数を加算して保持
int i = 0;
while(true) {
// 検索文字の長さが検索位置+検索文字数以上の場合、indexOfで検索
if( 文字列Len >= i + 検索文字数) {
int 位置 = 文字列.indexOf(検索文字, i);
// -1 == 位置の場合、文字列検索でヒットしなかった場合のため、処理を終了する
if ( -1 == 位置) {
break;
// -1 以外の場合、文字列検索でヒットしたため、リストに位置を加える
// 変数 iは今回ヒットした位置以降で検索したいため
// 位置 + 検索文字数を代入する
} else {
i = 位置 + 検索文字数;
list.add(位置);
}
// 検索文字の長さが検索位置+検索文字数未満の場合、処理を終了する
} else {
break;
}
}
// 該当したすべての検索文字の位置を出力
System.out.println(list);
// 該当したすべての検索文字がいくつあるか個数を出力
System.out.println(list.size());
// 実行結果
[]
0

Javaの記事の一覧はJava にまとめてあります

