为什么即使我在 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)
永远是真的。
我目前正在尝试解决这个问题,但似乎一直遇到这个问题 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)
永远是真的。