【问题标题】:String substring(i,j) throw IndexOutOfBounds Exception in method() but not in main()String substring(i,j) 在 method() 中抛出 IndexOutOfBounds 异常,但在 main() 中没有
【发布时间】:2018-03-27 00:44:00
【问题描述】:
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() 中运行相同的代码时却没有抛出该异常。

【问题讨论】:

  • 你在这里使用StringBuffer是完全多余的。

标签: java methods substring main stringindexoutofbounds


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-10
    • 2011-05-25
    • 1970-01-01
    • 2014-06-11
    • 2014-04-03
    • 1970-01-01
    • 2016-02-23
    • 1970-01-01
    相关资源
    最近更新 更多