Java jva中的字符串索引超出范围

Java jva中的字符串索引超出范围,java,string,methods,char,boolean,Java,String,Methods,Char,Boolean,如果字符串的拼写方式相同,那么它就是回文 前进 回文的例子包括“雷达”和“该死的,我疯了!” 编写一个java程序Palindromester,要求用户输入 然后检查输入的字符串是否为 回文与否 空间,非代数.,!:?-\;,字符串中的大小写 被忽视,例如,呆板的傻瓜,冷淡的吟游诗人。是一个 回文的 您的实现应该定义并使用isAlindrome方法 测试某个字符串是否为回文。签名 isPalindrome方法如下所示: boolean isPalindrome(String) 下面是该程序的运

如果字符串的拼写方式相同,那么它就是回文 前进

回文的例子包括“雷达”和“该死的,我疯了!”

编写一个java程序Palindromester,要求用户输入 然后检查输入的字符串是否为 回文与否

空间,非代数.,!:?-\;,字符串中的大小写 被忽视,例如,呆板的傻瓜,冷淡的吟游诗人。是一个 回文的

您的实现应该定义并使用isAlindrome方法 测试某个字符串是否为回文。签名 isPalindrome方法如下所示:

boolean isPalindrome(String)
下面是该程序的运行示例。用户的输入以粗体显示

java PalindromeTester
Introduction to Computer Programming (CMPS 200)
Spring 2015-16 2 of 3
Enter a string: I love CMPS 200
The string "I love CMPS 200" is NOT a palindrome.
这是我写的代码,它一直给我一个错误

我想知道我的错误是什么,是否有一种更快更简单的方法来编写这段代码


索引超出范围是由z=z+1后的回文字符引起的

保持简单:

public static boolean isPalindrome(String palindrome)
{
    palindrome = palindrome.replaceAll("\\W", ""); // remove all non word character
    palindrome = palindrome.toLowerCase();
    int size = palindrome.length();
    int halfSize = size / 2;

    for (int i = 0; i < halfSize; i++)
    {
        if(palindrome.charAt(i) != palindrome.charAt(size - i - 1))
            return false;
    }

    return true;
}

一种方法是从字符串中去掉非字母字符。然后检查字符串是否与自身相同,大写字母为:

public static boolean isPalindrome(String palindrome) {
    StringBuilder sanitisedString = new StringBuilder();
    for(char c : palindrome.toCharArray()) {
        if(Character.isLetter(c)) {
            sanitisedString.append(c);
        }
    }
    return sanitisedString.toString().toUpperCase().equals(sanitisedString.reverse().toString().toUpperCase());
}

为什么不创建一个新字符串并将反向的sourceString保存在其中呢

public static boolean readstring(String s)
{
    String b = "";
    for (int i= s.length() -1; i >=0 ;i--)
    {
        b = b + s.charAt(i);
    }
    System.out.print(b +" and "+ s +"    ");
    return b == s || b.Equals(s);
}

编辑:希望这符合要求,顺便说一句,不要使用“忽略”一词,而是“允许”

您的halfsize变量存储字符串长度的一半,但您的循环仅在该长度的一半以下-因此您只检查字符串的1/4。此外,您没有处理需要忽略的标点符号和空白字符。循环将同时检查前半部分和后半部分。为什么是1/4?因为您的循环停止在半大小/2。请显示您得到的错误。线程主java.lang.StringIndexOutOfBoundsException中的异常:字符串索引超出范围:7位于java.lang.String.charAtUnknown Source位于palindromepalindromester.ispalindromepalindromester.java:23位于palindromester.mainpalindromester.java:8是错误i盖蒂曾考虑过这个问题,但把它删除了。所以我又添加了它。如果有标点符号或空白字符,代码将返回false。这不符合要求。在决定字符串是否为回文时,您的代码应该忽略标点和空格。是的,请再次阅读,您是对的,更改了上面的代码,但我不确定它是否仍然符合要求。谢谢您的回答,不过,最好添加代码的解释,以及为什么它会是一个更好的答案,并且值得一些投票。它会帮助别人向你学习!
   public boolean isPalindrome(String word) {
        int backward = word.length() - 1;
        for (int x = 0; x < word.length(); x++) {
            if (word.charAt(x)!= word.charAt(backward--)) {
                return false;
            }
        }
        return true;
    }
   public boolean isPalindrome(String word) {
        int backward = word.length() - 1;
        for (int x = 0; x < word.length(); x++) {
            if (word.charAt(x)!= word.charAt(backward--)) {
                return false;
            }
        }
        return true;
    }