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

如何检查字符串中是否存在指定字符?Java统计co_e代码越界问题排查

解决字符串索引越界问题,正确统计"co_e"格式的关键词

首先得说清楚你代码里的问题出在哪:你原来的循环条件i < str.length()太宽泛啦!当i走到字符串的后几个位置时,i+3会超出字符串的最大索引——毕竟字符串的索引是从0开始的,比如长度为10的字符串,最后一个字符的索引是9,要是i取8,i+3就是11,这时候调用str.charAt(i+3)肯定会抛出StringIndexOutOfBoundsException,像你测试的"xxcozeyycop",后面的"cop"只有3个字符,当i走到倒数第三个位置(对应那个'c'),就会触发这个错误。

那怎么改呢?核心是确保每次检查的四个字符位置都有效,也就是i的取值范围得保证i+3不超过字符串的最大索引。换句话说,i最多只能到str.length() - 4(因为(str.length()-4)+3 = str.length()-1,刚好是最后一个索引)。

给你写个修正后的代码:

public int countCode(String str) {
    int count = 0;
    // 循环终止条件改成i <= str.length() - 4,避免索引越界
    for (int i = 0; i <= str.length() - 4; i++) {
        // 只需要检查c、o、e的位置,中间字符不用管
        if (str.charAt(i) == 'c' && str.charAt(i+1) == 'o' && str.charAt(i+3) == 'e') {
            count++;
        }
    }
    return count;
}

要是想更高效一点,可以先判断字符串长度,如果小于4,直接返回0,毕竟连四个字符都凑不齐,肯定没有符合条件的关键词:

public int countCode(String str) {
    if (str.length() < 4) {
        return 0;
    }
    int count = 0;
    for (int i = 0; i <= str.length() - 4; i++) {
        if (str.charAt(i) == 'c' && str.charAt(i+1) == 'o' && str.charAt(i+3) == 'e') {
            count++;
        }
    }
    return count;
}

测试一下你说的几个字符串:

  • "aaacodebbb":i=3的时候匹配,count=1;
  • "codexxcode":i=0和i=6的时候匹配,count=2;
  • "xxcozeyycop":i=2的时候匹配,后面的"cop"因为长度不够不会被检查,不会报错,count=1。

这样就解决你的问题啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:54:43