簡體   English   中英

線程“main”中的回文字符串異常 java.lang.StringIndexOutOfBoundsException:字符串索引超出范圍:-1

[英]Palindrome String Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -1

在嘗試檢查回文字符串時出現此錯誤“字符串索引超出范圍 -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"); 
    }
}

刪除這個

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

但是當字符串相當大時這不會太有效

在循環中你想使用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");
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM