![](/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.