1. ホーム
  2. java

[解決済み] 文字列中の部分文字列の出現頻度

2022-05-12 23:38:17

質問

以下のアルゴリズムはなぜ停止しないのでしょうか? (strは私が検索している文字列、findStrは私が見つけようとしている文字列です)

String str = "helloslkhellodjladfjhello";
String findStr = "hello";
int lastIndex = 0;
int count = 0;

while (lastIndex != -1) {
    lastIndex = str.indexOf(findStr,lastIndex);

    if( lastIndex != -1)
        count++;

    lastIndex += findStr.length();
}

System.out.println(count);

どのように解決するのですか?

最後の行が問題になっていました。 lastIndex は決して-1にはならないので、無限ループになってしまいます。これは、コードの最後の行を if ブロックに移動することで修正することができます。

String str = "helloslkhellodjladfjhello";
String findStr = "hello";
int lastIndex = 0;
int count = 0;

while(lastIndex != -1){

    lastIndex = str.indexOf(findStr,lastIndex);

    if(lastIndex != -1){
        count ++;
        lastIndex += findStr.length();
    }
}
System.out.println(count);