我不确定为什么我会收到此错误。该代码旨在测试不考虑标点符号的回文。
所以这是我的代码:
char junk;
String temp = "";
for (int i = 0; i < txt.length(); i++)
{
junk = txt.charAt(i);
if (Character.isLetterOrDigit(txt.charAt(jumk)))
{
temp += junk;
}
}
txt = temp;
left = 0;
right = txt.length() -1;
while (txt.charAt(left) == txt.charAt(right) && right > left)
{
left++;
right--;
}
java.lang.StringIndexOutOfBoundException:字符串索引超出范围0
在PalindromeTester.main(PalindromeTester.java:35)
和第35行如下:
while (txt.charAt(left) == txt.charAt(right) && right > left)
答案 0 :(得分:1)
if (Character.isLetterOrDigit(txt.charAt(yP)))
是你的问题,yP是一个char而不是对某个职位的引用。
你可能意味着:
if (Character.isLetterOrDigit(yP))
编辑:我的评论: 那么右边的值是-1而charAt需要一个大于0的整数..所以你应该检查txt的长度,如果它是== 0,那么显示一条消息,说明需要一个实际的单词。
你应该在到达这一行之前停止执行:
right = txt.length() -1;
这是您的固定代码:
do
{
System.out.println("Enter a word, phrase, or sentence (blank line to stop):");
txt = kb.nextLine();
}
while (!txt.equals(""));
txt = txt.toLowerCase();
char yP;
String noP = "";
for (int i = 0; i < txt.length(); i++)
{
yP = txt.charAt(i);
if (Character.isLetterOrDigit(txt.charAt(yP)))
{
noP += yP;
}
}
txt = noP;
left = 0;
right = txt.length() -1;
while (txt.charAt(left) == txt.charAt(right) && right > left)
{
left++;
right--;
}
if (left > right)
{
System.out.println("Palindrome");
cntr++;
}
else
{
System.out.println("Not a palindrome");
}
答案 1 :(得分:0)
变量yP
是索引 i
中的字符,而不是索引(因为您在行上使用它时会给出错误)。将该行更改为:
if (Character.isLetterOrDigit(yP)) { ...
编辑新问题:
您不需要使用while循环来检查用户是否输入任何内容,因为在这种情况下您不想重复执行 (这是循环的用途)。由于你只想做一次的事情,即打印出他们找到了多少回文,你可以使用if
语句。结构看起来像这样:
do {
get user input
if they entered the empty string "" {
print out how many palindromes they have found so far
} else { // they must have entered text, so check for palindrome
your normal palindrome checking code goes here
}
} while (your condition);
编辑2:
尝试更改
if (left > right)
到
if (left >= right)
因为如果左==右,这意味着它们都在奇数长度字符串的中间字符上(例如皮艇中的'y'),这意味着该字符串是回文。