为什么即使我在 String 数组的范围内,也会出现 StringOutOfBoundsException?

Why do I get a StringOutOfBoundsException even though I am within bounds of the String array?

我目前正在尝试解决这个问题,但似乎一直遇到这个问题 StringOutOfBoundsException,有人可以向我解释为什么吗? 当我退出 while 循环时,似乎我输入了错误的 endPtr--;

class Solution {
    public boolean isPalindrome(String s) {
        if (s == null) {
            throw new IllegalArgumentException("Illegal input!");
        }
        if (s.length() <= 1) {
            return true;
        }
        
        int startPtr = 0;
        int endPtr = s.length() - 1;
        
        while (startPtr < endPtr) {
            while (startPtr < endPtr && !Character.isLetterOrDigit(s.charAt(startPtr))) {
                startPtr++;
            }
            
            //ERROR while (startPtr < endPtr && !Character.isLetterOrDigit(s.charAt(endPtr)))  {
                //endPtr--;
            //}
            
            if (startPtr < endPtr && Character.toLowerCase(s.charAt(startPtr)) != Character.toLowerCase(s.charAt(endPtr))) {
                return false;
            }
        
            startPtr++;
            endPtr++;
        }
        return true;
    }
}

在主循环结束时,您正在递增 endPtr。

    startPtr++;
    endPtr++;

通过这样做,您将字符串的结尾定位在它的真正结尾之后。

错误来了。

而且,您正在创建一个无限循环,因为条件

while (startPtr < endPtr)

永远是真的。