使回文检查器保持字符串索引超出范围错误的一半,如何解决?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使回文检查器保持字符串索引超出范围错误的一半,如何解决?相关的知识,希望对你有一定的参考价值。

所以我正在做一个回文检查器,它的作用是通过一个语句,例如说“ 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)的长度,然后从中删除空白并尝试访问该索引,但是新字符串较短,会出现错误。

以上是关于使回文检查器保持字符串索引超出范围错误的一半,如何解决?的主要内容,如果未能解决你的问题,请参考以下文章

如何处理此索引超出范围错误 (LINGO)

数组索引超出范围

辅助选择器的“ForEach”给了我致命错误:索引超出范围

具有动态数组的 SwiftUI 多个选择器,索引超出范围错误

Python(熊猫)错误IndexError:单个位置索引器超出范围

错误:索引超出了数组的范围。 [复制]