我正在尝试执行一个程序,找到字符串中最大的连续出现。这是我的代码。
public class Assign2{
public int maxOcc(String str){
System.out.println("Entered method");
int j,i,counter;
j = i = 0;
int max = 0;
int size = str.length();
System.out.println("Size of string-->"+size);
for(i = 0;i<size;i++){
j = i;
counter = 0;
while(str.charAt(i)==str.charAt(j) && j < size){
counter++;
j++;
}
if(counter > max)
max = counter;
}
return max;
}
public static void main(String args[]){
Assign2 a = new Assign2();
System.out.println(a.maxOcc("abbbbaaaaaagsgsgaaaa"));
}
}
然而,当我尝试运行这个程序时,我生成一个&#34;字符串索引超出界限&#34;。任何想法?
答案 0 :(得分:1)
问题出在这种情况:
while(str.charAt(i)==str.charAt(j) && j < size){
Java从左到右进行评估,因此它在检查str.charAt(j)
之前评估j < size
- 所以如果j
太大(因为你在循环中递增),你会得到AIOOBE。
反转子表达式:
while (j < size && str.charAt(i)==str.charAt(j)){
这不会失败,因为&&
短路:一旦j < size
为假,它就不会检查其余部分。