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

如何修复查找字符串模式匹配位置的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 20:45:00