尝试检查Palindrome字符串时出现此错误" String Index out of bound -1"
public static void main(String[]args) {
String s= "Madam";
String Temp=s;
String k=new String();
//System.out.println(s.length());
int m=s.length();
for (int i=5;i>=m;m--) {
System.out.println(m);
String t=String.valueOf(s.charAt(m-1) ) ;
k=k+t;
System.out.println(k);
}
System.out.println(k);
if (k==Temp) {
System.out.println("String is Palindrome"+" "+k);
} else {
System.out.println("String is not Palindrome");
}
}
答案 0 :(得分:1)
删除此
for (int i=5;i>=m;m--)
用这个
for (int i=s.length();i>0;i--)
String t=String.valueOf(s.charAt(i-1) ) ;
因为在这种情况下字符串的长度是5,然后在这种情况下索引范围是0-4并且你也访问0索引,这将在这个地方给你-1 s.charAt(m-1)
所以不要遍历0指数。加上i--
应该使用递减运算符而不是m--
或一行代码也可以是
System.out.println(s.equals(new StringBuilder(s).reverse().toString()));
// this will give you boolean result with True or False
// which can be used with conditional statements to make thing concise and clean
但是当字符串非常大时,这不会太有效
答案 1 :(得分:0)
在循环中,您要使用i
,但要处理m
。即使你正在减少m
。每当m减小到0时,s.charAt(m-1)
试图在字符串的负位置找到字符。因此,您将获得StringIndexOutOfBoundsException
。所以,而不是
for (int i=5;i>=m;m--) {
System.out.println(m);
String t=String.valueOf(s.charAt(m-1) ) ;
k=k+t;
System.out.println(k);
}
应该是:
for (int i = m-1; i >= 0; i--) {
String t = String.valueOf(s.charAt(i)) ;
k=k+t;
System.out.println(k);
}
只需代码即可:
String s = "Madam", reverse = "";
int m = s.length();
for (int i = m - 1; i >= 0; i--) {
reverse += s.charAt(i);
}
System.out.println(reverse);
if (reverse.equalsIgnoreCase(s)) { // don't use '==' for checking equality of strings
System.out.println(s + " is Palindrome");
} else {
System.out.println(s + " is not Palindrome");
}