Palindrome字符串异常在线程" main" java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:-1

时间:2016-09-14 18:03:15

标签: java string

尝试检查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"); 
    }
}

2 个答案:

答案 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");
}