Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
线程中的回文字符串异常;“主要”;java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:-1_Java_String - Fatal编程技术网

线程中的回文字符串异常;“主要”;java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:-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-- 或者一

当尝试检查回文字符串时,出现以下错误“字符串索引超出界限-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

但是,当您希望使用
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
这样的缩写。你可以节省几秒钟的打字时间,但这会让目标受众(尤其是新手)感到困惑。@Holger
StringBuilder
更好,尽管我的意思是,当字符串变得太大时,可以有更好的解决方案,但有些新手不会;我不喜欢algos和about
S.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");
}