Java 字符串索引越界异常错误
我真的不知道为什么会出现这个错误。该代码旨在测试回文,而不考虑标点符号 这是我的代码:Java 字符串索引越界异常错误,java,string,Java,String,我真的不知道为什么会出现这个错误。该代码旨在测试回文,而不考虑标点符号 这是我的代码: char junk; String temp = ""; for (int i = 0; i < txt.length(); i++) { junk = txt.charAt(i); if (Character.isLetterOrDigit
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--;
}
是你的问题,yP是一个字符而不是一个位置的引用
你的意思可能是:
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");
}
do
{
System.out.println(“输入一个单词、短语或句子(空行停止):”;
txt=kb.nextLine();
}
而(!txt.equals(“”);
txt=txt.toLowerCase();
char-yP;
字符串noP=“”;
对于(int i=0;ileft)
{
左++;
对--;
}
如果(左>右)
{
System.out.println(“回文”);
cntr++;
}
其他的
{
System.out.println(“不是回文”);
}
是你的问题,yP是一个字符而不是一个位置的引用
你的意思可能是:
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");
}
do
{
System.out.println(“输入一个单词、短语或句子(空行停止):”;
txt=kb.nextLine();
}
而(!txt.equals(“”);
txt=txt.toLowerCase();
char-yP;
字符串noP=“”;
对于(int i=0;ileft)
{
左++;
对--;
}
如果(左>右)
{
System.out.println(“回文”);
cntr++;
}
其他的
{
System.out.println(“不是回文”);
}
变量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)
到
因为如果left==right,这意味着它们都位于奇数长度字符串(例如kayak中的“y”)的中间字符上,这意味着该字符串是回文。变量
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)
到
因为如果left==right,这意味着它们都位于奇数长度字符串(例如kayak中的“y”)的中间字符上,这意味着该字符串是回文。作为旁注:我会将第一个for替换为:txt.replaceAll(“\W”,”);你差一点就得到了。。。此行:Character.isleterOrdigit(txt.charAt(yP))正在字符串中查找位置,而不是字符。作为旁注:我将用:txt.replaceAll(“\W”,”)替换第一个for;你差一点就得到了。。。这一行:Character.isleterordigit(txt.charAt(yP))正在字符串中查找位置,而不是字符。不用担心,欢迎使用堆栈溢出!如果这些答案中的任何一个对您有帮助,您应该单击他们答案旁边的复选框,将其指示为已接受的答案。好的,实际上现在它可以用来说明它是否是回文,但当我只按enter键而不输入任何内容时,我可以在第38行显示另一个错误,即:while(txt.charAt(左)==….行与以前相同的错误。右键的值为-1,字符需要大于0的整数。因此,您应该检查txt的长度,如果它为==0,则显示一条消息,说明需要一个实际单词。是的,im在do while循环中的含义是什么?如果他们输入一个空行并输入t,我希望它以某种方式跳过它告诉他们有多少回文。我试着用do while循环来做,但因为它在循环中询问他们,while直到之后才起作用。查看我编辑的帖子,你会看到while循环的结束让你感到满足。不用担心,欢迎使用stack overflow!如果这些答案中的任何一个对你有帮助,你应该单击复选框beside他们的答案以表明它是被接受的答案。好的,实际上现在它可以用来表示它是否是回文,但当我只是点击回车键而没有输入任何内容时,我可以在第38行显示另一个错误,即:while(txt.charAt(左)==….行与以前相同的错误。右键的值为-1,字符需要大于0的整数。因此,您应该检查txt的长度,如果为==0,则显示一条消息,说明需要实际单词。是的,im的意思是什么