gpt4 book ai didi

java - 如何修复 "StringIndexOutOfBoundsException"错误?

转载 作者:行者123 更新时间:2023-11-30 05:41:15 25 4
gpt4 key购买 nike

我需要编写一个程序来打印两个字符串中最长的公共(public)子字符串。例如:

String str1 = "abcdef";
String str2 = "abcgef";

最长的公共(public)字符串应该是“abc”。我只能使用循环、字符串和数组!没有方法/函数等。我是初学者,虽然我知道函数,但不允许使用它。

我尝试使用计数变量,以便最后一个字母不会反复与第二个字符串中的其他字符进行比较,但会发生相同的错误。

String com = "";
String com2 = "";
int a;
int b;

for (i = 0; i < str1.length(); i++) {

int count1 = 0;
int count2 = 0;

for (int j = 0; j < str2.length(); j++) {
a = i;
b = j;
com2 = "";

while (str1.charAt(a) == str2.charAt(b)) {
com2 = com2 + str1.charAt(a);

if (com2.length()>com.length()) {
com = com2;
}

if (a<str1.length()-1) {
a++;
}

if (b<str2.length()-1) {
b++;
}
}
}
}

System.out.println(com);

就像我说的,结果应该是 "abc" 就是这样,但我收到一个运行时错误,指出 StringIndexOutOfBoundsException 超出范围 6。

谢谢!

最佳答案

你有异常(exception),因为你循环直到 a<str1.length()b<str2.length() 。您应该将其更改为 a<str1.length()-1 。发生这种情况是因为你的字符串长度=6,但你从 0 开始。所以第 6 个元素将是 5。另外,在 while{}a 时,你有无限循环和b到达最后一个索引 str1str2 ,所以,要小心。

附注

您可以将其更改为

public void method() {
StringBuilder com = new StringBuilder();
String str1 = "abcdef";
String str2 = "abcgef";

if (str1.length() == str2.length()) {
for (int i = 0; i < str1.length() - 1; i++) {
if (str1.charAt(i) == str2.charAt(i)) {
com.append(str2.charAt(i));
continue;
} else {
break;
}
}
System.out.println(com);
} else {
System.out.println("They have different length");
}
}

关于java - 如何修复 "StringIndexOutOfBoundsException"错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55606293/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com