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()中运行相同的代码时没有抛出异常。
答案 0 :(得分:0)
我想我知道为什么会发生这种情况,因为在isPalindrome()中,JVM首先检查语法,j不能小于i所以我改变了 for(int j = s.length(); j&gt; = 0; j--) 到 for(int j = s.length(); j&gt; = i; j--) 那个例外现在已经消失了。