线程中的回文字符串异常;“主要”;java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:-1
当尝试检查回文字符串时,出现以下错误“字符串索引超出界限-1” 去掉这个线程中的回文字符串异常;“主要”;java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:-1,java,string,Java,String,当尝试检查回文字符串时,出现以下错误“字符串索引超出界限-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索引,这将在此处为您提供-1s.charAt(m-1),所以不要遍历0索引。另外,应该有带有减量运算符的i--,而不是m-- 或者一
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索引,这将在此处为您提供-1s.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");
}
使用
equals()检查相等性。
感谢“For Loop”工作正常。我不仅改进了我的代码,还学会了另一种更好的编码方法。感谢helpException“字符串索引超出范围:5”它给出了这个异常。这很好“对于(int I=m-1;I>=0;I--),StringBuilder
方法肯定比调用String.valueOf
更有效,后跟每个字符的字符串连接。您可以使用s.contentEquals(新的StringBuilder.reverse())
使其更加高效,不幸的是,它不能像OP的示例那样在开头使用大写字母。顺便说一句,不要使用像S.o.p
这样的缩写。你可以节省几秒钟的打字时间,但这会让目标受众(尤其是新手)感到困惑。@HolgerStringBuilder
更好,尽管我的意思是,当字符串变得太大时,可以有更好的解决方案,但有些新手不会;我不喜欢algos和aboutS.o.p
我在早期阶段就知道这一点,所以我想我可以有一个单行杠杆,虽然我不应该有。谢谢你指出这一点,也谢谢你花时间。
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");
}