JAVA 中的单词回文 (StringIndexOutOfBoundsException).



我想知道是否缺少一些东西。如果我输入"赛车",它必须显示回文,如果我输入"字符串豆",它必须显示的不是回文,但是当我运行代码时它有一个错误。

线程"main"中的异常 java.lang.StringIndexOutOfBounds异常:字符串索引超出范围:3 at java.lang.String.charAt(String.java:686) 在普拉克蒂斯。回文(回文.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");
            }
    }

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

发生此问题是因为您在长度上索引;您应该从零索引到长度减一:

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

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

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

由于 charAt() 是 0 索引的,charAt(word.length()) 将是字符串末尾后面的一个字符。只需在 word.length()-1 处开始 x。希望对您有所帮助!

相关内容

  • 没有找到相关文章

最新更新