如何修复查找字符串模式匹配位置的Java代码输出错误问题
问题分析与修正代码
核心错误点
- 内层循环终止条件错误:你写的
j < tocheck.length()逻辑完全错误,j是目标串的遍历下标,从i起始,应该遍历完整个模式串长度的字符,终止条件应该对应模式串的长度。同时外层循环要提前限制i的上限为str1.length() - tocheck.length(),避免剩余字符不足匹配模式串导致下标越界 - 模式串下标匹配逻辑错误:用全局count变量记录模式串匹配位置逻辑混乱,直接用偏移量计算模式串对比下标即可,不需要额外维护count变量
- 边界判断缺失:没有提前判断模式串长度大于目标串的极端情况,会直接触发运行时报错
修正后可运行代码
public class Word_check { public static void main(String[] args) { String str1 = "ABCABCDEABCDEA"; String tocheck = "ABCD"; // 提前处理极端情况 if (tocheck.length() > str1.length()) { return; } // 外层i的上限不需要到str1末尾,剩余字符不够直接不用遍历 for (int i = 0; i <= str1.length() - tocheck.length(); i++) { boolean isFound = true; // 内层逐位对比 for (int j = 0; j < tocheck.length(); j++) { if (str1.charAt(i + j) != tocheck.charAt(j)) { isFound = false; break; } } // 匹配成功输出1基起始下标,需要0基下标直接输出i即可 if (isFound) { System.out.println(i + 1); } } } }
运行验证
使用你给出的示例目标串ABCABCDEABCDEA、模式串ABCD运行上述代码,输出结果为4和9,完全符合预期。
内容的提问来源于stack exchange,提问作者Mayank Verma
相关产品推荐
相关产品推荐

