0
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() 中运行相同的代码时没有抛出该异常。

4

1 回答 1

0

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

于 2017-10-15T11:08:03.800 回答