找到字符串中字符的最高连续出现会使字符串索引超出范围

时间:2017-02-17 21:17:52

标签: java indexoutofboundsexception

我正在尝试执行一个程序,找到字符串中最大的连续出现。这是我的代码。

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;。任何想法?

1 个答案:

答案 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为假,它就不会检查其余部分。