字符串子字符串(i,j)抛出方法()中的IndexOutOfBounds异常但不在main()中抛出

时间:2017-10-15 11:03:36

标签: java methods substring main stringindexoutofbounds

public class Longest
{
    public static void main(String[] args)
    {
        String tc = "babad";
        StringBuffer sb = new StringBuffer(tc.substring(0,tc.length()));
        System.out.println(sb.toString().equals(sb.reverse().toString())); 
        //no exception

        System.out.println(longestPalindrome(tc)); // throw exception
    }
    public String longestPalindrome(String s) {
        if(s.length()<2)
            return s;
        int max = 0;
        int beg = 0;
        for(int i =0;i<s.length();i++)
        {
            for(int j = s.length();j>=0;j--)
            {
                if(isPalindrome(s,i,j) && j-i>max)
                {
                    max = Math.max(j-i, max);
                    beg = i;
                }
                if(max == s.length())
                    return s;
            }
        }
        return s.substring(beg, beg+max);
    }

    private static boolean isPalindrome(String s,int left, int right)
    {
        StringBuffer sb = new StringBuffer(s.substring(left, right));
        return sb.toString().equals(sb.reverse().toString());
    }
}

我的问题是为什么eclipse在调用isPalindrome()时抛出了StringIndexOutOfBoundsException,但是当它在main()中运行相同的代码时没有抛出异常。

1 个答案:

答案 0 :(得分:0)

我想我知道为什么会发生这种情况,因为在isPalindrome()中,JVM首先检查语法,j不能小于i所以我改变了     for(int j = s.length(); j&gt; = 0; j--) 到     for(int j = s.length(); j&gt; = i; j--) 那个例外现在已经消失了。