[英]Making a palindrome checker I keep getting a string index out of range error for half of it, how do i fix?
所以我正在做一個回文檢查器,它的作用是通過一個語句將 go 說成例如“賽車”,如果它是一個回文它會說真的,在這種情況下這是因為賽車向后是賽車,但是如果它是“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);
}
}
它完成了它需要做的事情並給出了 output: "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),然后從中刪除空格並嘗試訪問該索引,但是新字符串較短並且您收到錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.