如何完善Java代码实现可重叠的字符串模式匹配次数统计?
解决重叠模式字符串计数问题
这里给出修正后的完整代码,实现允许重叠匹配的模式计数功能:
public class Main { public static final String TEXT = "aaababaabaaaabaabaabaabaaababaabaaababaabaaaabaabaabaabbabaabaaababaababaabaabaabaaabbaab"; public static final String PATTERN = "aab"; public static void main(String[] args) { int count = 0; int patternLength = PATTERN.length(); int textLength = TEXT.length(); // 遍历所有可能的起始位置,避免数组越界 for (int i = 0; i <= textLength - patternLength; i++) { boolean isMatch = true; // 逐个比对模式字符串的每个字符 for (int j = 0; j < patternLength; j++) { if (TEXT.charAt(i + j) != PATTERN.charAt(j)) { isMatch = false; break; // 不匹配直接跳出内层循环,减少无效比对 } } if (isMatch) { count++; } } System.out.println("字符串 " + PATTERN + " 在文本中出现了 " + count + " 次"); } }
关键修改说明:
- 修正循环范围:原代码循环到
TEXT.length()会导致后续charAt(i+j)触发越界异常,正确范围是i <= textLength - patternLength,确保从i开始能完整容纳整个模式字符串。 - 移除重复变量定义:原循环内重新定义的
int count = 1会覆盖外层计数变量,直接删除该错误定义。 - 添加字符比对逻辑:通过内层循环逐个校验文本起始位置i后的字符与模式字符串的对应字符,一旦不匹配就终止当前位置的校验。
- 匹配成功计数:当某个起始位置的所有字符都匹配时,将计数加1。
内容的提问来源于stack exchange,提问作者Elijah Morte
相关产品推荐
相关产品推荐

