关于java的java.lang.StringIndexOutOfBoundsException 问题

dark9527 2019-12-06 11:24:34
如题,在做leetCode28题,实现strStr时在if判断那里提示越界异常,来个大佬解释下为什么会越界

public static int strStr(String haystack, String needle) {
if(needle.isEmpty())
return 0;
int j = 0;
int i = 0;
int temp = -1;
for(; j < haystack.length(); j++){
//在提交的时候会提示数组越界,没想明白为什么???
if(haystack.charAt(j) != needle.charAt(i)){
i=0;
}
else{
i++;
//i如果是1,说明j是第一次相等出现的位置
if(i == 1)
temp = j;
}
}
//如果i走完了说明是有相等的元素的,则返回j第一次出现的位置
return (i == needle.length()) ? temp:-1;
}
...全文
647 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
qybao 2019-12-06
  • 打赏
  • 举报
回复
简单来说,你的i已经走到needle的最后一个位置了,也就是下一次循环i就会越界,但haystack还没有走完,下一个j继续有效,还会继续进入下一次循环,这不就造成i越界了吗?
  • 打赏
  • 举报
回复
else{
                i++;
                //i如果是1,说明j是第一次相等出现的位置
                if(i == 1)
                    temp = j;
            }
你这里else说明相等了呗,那就应该提前退出循环了呀,怎么还接着往下走,那可不越界了
  • 打赏
  • 举报
回复
打断看一下呗,haystack.charAt(j)应该是不会越界的,那么就是needle.charAt(i)了,你再比较值前打印下needle的length看看

62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧