You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Java子串多次出现检测代码的Index初始化位置影响结果?

子串多次出现检测的代码问题解析

我尝试编写一段Java代码检测字符串中是否存在某个子串的多次出现:当子串出现超过一次时方法返回true,否则返回false。该方法在子串完全不存在时工作正常,但在子串仅出现一次时错误返回true,不符合预期。

最初的错误实现

public boolean twoOccurrencesMethod(String a, String b){
    int fromIndex = 0;
    int count = 0;
    int Index = b.indexOf(a, fromIndex);
    
    while((Index) != -1){
      count++;
      fromIndex = Index + 1;
      
      if (count > 1){
        return true; 
      }
    }
    return false;
}

调整后的正确实现

public boolean twoOccurrencesMethod(String a, String b){
    int fromIndex = 0;
    int count = 0;
    int Index;
    
    while((Index = b.indexOf(a, fromIndex)) != -1){
      count++;
      fromIndex = Index + 1;
      
      if (count > 1){
        return true; 
      }
    }
    return false;
}

问题原因分析

两种写法的核心差异在于循环过程中是否重新执行indexOf来更新Index的取值:

  • 第一种错误写法:
    循环外仅执行一次b.indexOf(a, fromIndex)获取初始Index值,进入循环后,只会更新fromIndex,但从未重新调用indexOf去查找下一个子串的位置。当子串仅出现一次时,第一次进入循环count变为1,不触发return true;但由于Index始终保持第一次的非-1值,循环条件永远成立,会再次进入循环体,count变为2,触发return true,这就是不符合预期的原因。

  • 第二种正确写法:
    每次执行循环条件时,都会先执行Index = b.indexOf(a, fromIndex),用更新后的fromIndex去查找下一个子串的位置。当子串仅出现一次时,第一次循环结束后,第二次执行循环条件时indexOf会返回-1,循环直接终止,最终返回false,符合预期。

内容的提问来源于stack exchange,提问作者Jesuite Akhidenor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 18:43:14