我想知道是否遗漏了什么。 如果我输入“赛车”,它必须显示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");
}
}
答案 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即可。希望有所帮助!