![](/img/trans.png)
[英]Error after compiling Java project : Exception in thread “main” java.lang.StringIndexOutOfBoundsException: String index out of range: 0
[英]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.