制作回文检查器我一直收到一半的字符串索引超出范围错误,我该如何解决?
Making a palindrome checker I keep getting a string index out of range error for half of it, how do i fix?
所以我正在制作一个回文检查器,它所做的是它会通过一个语句,例如 "racecar" 如果它是一个回文,它会说 true,在这种情况下它是因为 racecar backwards 是 racecar,但如果它是 "ratecar" 作为输入那么它会说 false 因为 ratecar 与 racetar 不同,而且我不断收到类似字符串索引超出范围类型的错误。
我创建了一个新页面并尝试使用这个:
class Main
{
public static void main(String[] args)
{
String str = new String("Go Hang A Salami, I'm a Lasagna Hog!");
str = str.toLowerCase();
str = str.replaceAll(" ","");
str = str.replaceAll("[^a-zA-Z ]","");
System.out.println(str);
}
}
它做了它需要做的并给出了输出:"gohangasalamiimalasagnahog"
但是当我将上面的内容与它合并时,我制作的检查器(如下所示)不起作用。
class Main
{
public static void main(String[] args)
{
System.out.println("This is A-A-Ron's palindrome checker");
System.out.println(isPalindrome("Go Hang A Salami, I'm A Lasagna Hog!"));
}
public static boolean isPalindrome(String str)
{
int len = str.length();
int i, j;
j = len - 1;
for (i = 0; i <= (len - 1)/2; i++)
{
str = str.toLowerCase();
str = str.replaceAll(" ","");
str = str.replaceAll("[^a-zA-Z ]","");
System.out.println(str);
if(str.charAt(i) != str.charAt(j))
{
return false;
}
j--;
}
System.out.println(str);
return true;
}
`````
It should give the output of:
"This is A-A-Ron's palindrome checker
gohangasalamiimalasagnahog
true"
But, it is giving me this:
"This is A-A-Ron's palindrome checker
gohangasalamiimalasagnahog
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 35
at java.lang.String.charAt(String.java:658)
at Main.isPalindrome(Main.java:28)
at Main.main(Main.java:9)
exit status 1"
What do I do to fix it?
你的问题很简单。您从原始字符串中得到 len
但您替换了循环内的一些字符串。
就这样吧
public static boolean isPalindrome(String str) {
str = str.toLowerCase();
str = str.replaceAll(" ", "");
str = str.replaceAll("[^a-zA-Z ]", "");
System.out.println(str);
int len = str.length();
int i, j;
j = len - 1;
for (i = 0; i <= (len - 1) / 2; i++) {
if (str.charAt(i) != str.charAt(j)) {
return false;
}
j--;
}
System.out.println(str);
return true;
}
您正在存储原始字符串 (36) 的长度,然后从中删除白色 space 并尝试访问该索引,但是新字符串更短,您得到了错误。
所以我正在制作一个回文检查器,它所做的是它会通过一个语句,例如 "racecar" 如果它是一个回文,它会说 true,在这种情况下它是因为 racecar backwards 是 racecar,但如果它是 "ratecar" 作为输入那么它会说 false 因为 ratecar 与 racetar 不同,而且我不断收到类似字符串索引超出范围类型的错误。
我创建了一个新页面并尝试使用这个:
class Main
{
public static void main(String[] args)
{
String str = new String("Go Hang A Salami, I'm a Lasagna Hog!");
str = str.toLowerCase();
str = str.replaceAll(" ","");
str = str.replaceAll("[^a-zA-Z ]","");
System.out.println(str);
}
}
它做了它需要做的并给出了输出:"gohangasalamiimalasagnahog" 但是当我将上面的内容与它合并时,我制作的检查器(如下所示)不起作用。
class Main
{
public static void main(String[] args)
{
System.out.println("This is A-A-Ron's palindrome checker");
System.out.println(isPalindrome("Go Hang A Salami, I'm A Lasagna Hog!"));
}
public static boolean isPalindrome(String str)
{
int len = str.length();
int i, j;
j = len - 1;
for (i = 0; i <= (len - 1)/2; i++)
{
str = str.toLowerCase();
str = str.replaceAll(" ","");
str = str.replaceAll("[^a-zA-Z ]","");
System.out.println(str);
if(str.charAt(i) != str.charAt(j))
{
return false;
}
j--;
}
System.out.println(str);
return true;
}
`````
It should give the output of:
"This is A-A-Ron's palindrome checker
gohangasalamiimalasagnahog
true"
But, it is giving me this:
"This is A-A-Ron's palindrome checker
gohangasalamiimalasagnahog
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 35
at java.lang.String.charAt(String.java:658)
at Main.isPalindrome(Main.java:28)
at Main.main(Main.java:9)
exit status 1"
What do I do to fix it?
你的问题很简单。您从原始字符串中得到 len
但您替换了循环内的一些字符串。
就这样吧
public static boolean isPalindrome(String str) {
str = str.toLowerCase();
str = str.replaceAll(" ", "");
str = str.replaceAll("[^a-zA-Z ]", "");
System.out.println(str);
int len = str.length();
int i, j;
j = len - 1;
for (i = 0; i <= (len - 1) / 2; i++) {
if (str.charAt(i) != str.charAt(j)) {
return false;
}
j--;
}
System.out.println(str);
return true;
}
您正在存储原始字符串 (36) 的长度,然后从中删除白色 space 并尝试访问该索引,但是新字符串更短,您得到了错误。