String Index Out Of Bound异常错误

时间:2012-10-28 22:37:43

标签: java string

我不确定为什么我会收到此错误。该代码旨在测试不考虑标点符号的回文。

所以这是我的代码:

            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)

2 个答案:

答案 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'),这意味着该字符串是回文。