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

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

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

PAGE TOP