如何检查字符串中是否存在指定字符?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
相关产品推荐
相关产品推荐

