-2

我想知道是否缺少某些东西。如果我输入“race car”,它必须显示回文,如果我输入“string beans”,它必须不显示回文,但是当我运行代码时它有一个错误。

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

     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

4 回答 4

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");
    }

于 2012-12-17T01:49:45.063 回答
2

出现问题是因为您正在索引长度;你应该从零索引到长度减一:

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

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

于 2012-12-17T01:49:25.703 回答
1

由于空格被替换,您正在使用word.length()finalwordwhenfinalword将具有不同长度的字符。此外, aString的索引从 0 到length - 1- 与数组完全一样,因此将其索引length()为超出范围。

于 2012-12-17T01:53:29.483 回答
0

由于 charAt() 是 0 索引的,因此 charAt(word.length()) 将是字符串末尾的一个字符。只需从 word.length()-1 开始 x。希望有帮助!

于 2012-12-17T01:48:43.667 回答