【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 にまとめてあります