提问人:Duddu Bala Guru Venkata Arjun 提问时间:8/26/2023 最后编辑:Dmitriy PopovDuddu Bala Guru Venkata Arjun 更新时间:8/26/2023 访问量:74
为什么它显示 StringOutofbounds 异常,而我只比较两个字符串的第 0 个索引?
why is it showing stringoutofbounds exception while i am only comparing the 0th index of two strings?
问:
我正在做一个 leetcode 问题,我得到了以下代码:String index out of range: 0 exception
public boolean isInterleave(String s1, String s2, String s3) {
int n = 0;
int m = 0;
if (s1.charAt(0) == s3.charAt(0)) {
n++;
for (int j = 1; j < s1.length(); j++) {
if (s1.charAt(j) == s3.charAt(j)) {
n++;
} else {
break;
}
}
for (int j = 0; j < s2.length(); j++) {
if (s2.charAt(j) == s3.charAt(j + n)) {
m++;
} else {
break;
}
}
}
if (n > 0) {
System.out.println(n);
} else {
System.out.println(m);
}
}
我试图计算一个字符串的两个字符串的字符数是相同的,就像在交错字符串问题中一样,并希望为
输入2,2
s1 = "aabcc", s2 = "dbbca", s3 = "aadbbcbcac"
答:
为什么,是因为空字符串在位置 0 没有 char,但你只是不需要它。
如果字符串为空,第一个 for 循环将不会进入,但第二个会进入。s1
您可以在此之前添加一个用于检查空性,但我不知道在这种情况下您应该返回什么,如下所示:if
public boolean isInterleave(String s1, String s2, String s3) {
if (s1.isEmpty() || s2.isEmpty() || s3.isEmpty() {
return ...; //what's appropriate for this case
}
... //your code.
}
我并不是说这是你应该做的来解决你的问题,只是如何避免你遇到的错误,并作为一种举例说明你为什么会遇到它的形式。
“为什么它显示 stringoutofbounds 异常,而我只比较两个字符串的第 0 个索引?..."
如果我在 LeetCode 上运行此代码并出现交错字符串问题,则会出现以下错误。
java.lang.StringIndexOutOfBoundsException: String index out of range: 0
at line 48, java.base/java.lang.StringLatin1.charAt
at line 1513, java.base/java.lang.String.charAt
at line 6, Solution.isInterleave
at line 54, __DriverSolution__.__helper__
at line 90, __Driver__.main
第 6 行是,
if (s1.charAt(0) == s3.charAt(0))
在 s1 或 s3 为空的情况下,String#charAt 方法将引发 IndexOutOfBoundsException,它是 StringIndexOutOfBoundsException 的父类。
这是 String#charAt JavaDoc,
抛出:
IndexOutOfBoundsException - 如果 index 参数为负数或不小于此字符串的长度。
您必须检查 s1 和 s3 的内容。
我在这里使用 String#isEmpty 方法,它检查 String#length 是否为 0。
if ((!s1.isEmpty() && !s3.isEmpty()) && s1.charAt(0) == s3.charAt(0))
这应该会让你进入该过程的下一步。
评论
s1.charAt(0) == s3.charAt(0)