Java - "字符串索引超出范围"异常

Roe*_*e84 1 java string

我只是为练习编写了这个小函数,但抛出了一个异常("String index out of range:29"),我不知道为什么......

(我知道这不是编写此函数的最佳方法,我可以使用正则表达式.)

这是代码:

public String retString(String x) 
{
    int j=0;
    int i=0;
    StringBuffer y = new StringBuffer(x);

try
{


    while ( y.charAt(i) != '\0' )
    {
        if (y.charAt(i) != ' ')
        {
            y.setCharAt(j, y.charAt(i));
            i++;
            j++;
        }
        else
        {
            y.setCharAt(j, y.charAt(i));
            i++;
            j++;
            while (y.charAt(i) == ' ')
                i++;
        }           
    }
    y.setCharAt(j,'\0');



}
finally 
{

    System.out.println("lalalalololo " );
}

    return y.toString();


}
Run Code Online (Sandbox Code Playgroud)

小智 5

您是否正在使用其他语言翻译此代码?您循环遍历字符串,直到到达空字符("\0"),但Java通常不会在字符串中使用它们.在C中,这可行,但在你的情况下,你应该尝试

i < y.length()
Run Code Online (Sandbox Code Playgroud)

代替

y.charAt(i) != '\0'
Run Code Online (Sandbox Code Playgroud)

另外,

 y.setCharAt(j,'\0')
Run Code Online (Sandbox Code Playgroud)

在你的代码的末尾不会调整字符串的大小,如果这是你期望的.你应该试试

y.setLength(j)
Run Code Online (Sandbox Code Playgroud)