我想知道是否缺少一些东西。如果我输入"赛车",它必须显示回文,如果我输入"字符串豆",它必须显示的不是回文,但是当我运行代码时它有一个错误。
线程"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。希望对您有所帮助!