JAVA中的Word Palindrome(StringIndexOutOfBoundsException)

时间:2012-12-17 01:47:04

标签: java loops for-loop

我想知道是否遗漏了什么。 如果我输入“赛车”,它必须显示Palindrome,如果我输入“字符串豆”,它必须显示不是回文,但是当我运行代码时它有错误。

  

线程“main”中的异常java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:3           at java.lang.String.charAt(String.java:686)           在praktis.Palindrome.main(Palindrome.java:11)​​

     public static void main (String args[]) {
        String word = JOptionPane.showInputDialog("Enter a String:");
        String finalword = word.replaceAll(" ","").toLowerCase();

        for (int x = word.length(); x >= word.length()-1; x--) {
        //this is my line 11 // 
                 finalword.charAt(x);
       }
            if(word.equals(finalword)) {
                JOptionPane.showMessageDialog(null, "Palindrome");
            }
            else {
                JOptionPane.showMessageDialog(null, "Not a Palindrome");
            }
    }

4 个答案:

答案 0 :(得分:3)

for (x = word.length()-1; x >= 0; x--)

编辑:

String word = JOptionPane.showInputDialog("Enter a String:");
        String finalword = "";
        int x;
        for (x = word.length()-1; x >= 0; x--) {
            finalword = finalword + word.charAt(x);
        }
        if (word.equals(finalword)) {
            JOptionPane.showMessageDialog(null, "Palindrome");
        } else {
            JOptionPane.showMessageDialog(null, "Not a Palindrome");
    }

答案 1 :(得分:2)

问题发生的原因是你在索引的长度;你应该从零到长度减去一个索引:

for (x = word.length()-1; x >= 0 ; x--)
    ....

此外,调用charAt(x)不会更改字符串(事实上,您在字符串上调用的方法都不能更改它:Java中的字符串是不可变的)。如果您正在反向编写单词,请考虑使用StringBuilder,并在反向迭代原始单词时为其添加字符。

答案 2 :(得分:1)

word.length()由于空格被替换而具有不同的长度时,您正在使用finalword来访问finalword中的字符。此外,String的索引从0到length - 1 - 与数组完全相同,因此在length()处将其编入索引是超出范围的。

答案 3 :(得分:0)

由于charAt()为0索引,因此charAt(word.length())将在字符串结尾之后为一个字符。只需在word.length() - 1处启动x即可。希望有所帮助!