Java - "String index out of range"异常

标签 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();


}

最佳答案

您是从另一种语言翻译这段代码吗?您将循环遍历字符串,直到到达空字符 ("\0"),但 Java 通常不会在字符串中使用这些字符。在 C 中,这可行,但在您的情况下,您应该尝试

i < y.length()

代替

y.charAt(i) != '\0'

此外,

 y.setCharAt(j,'\0')

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

y.setLength(j)

关于Java - "String index out of range"异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6319089/

相关文章:

java - 如何将android SDK添加到eclipse项目中?

java - 如何启动 GWT Super Dev Mode

java - 在 Java 中选择随机种子的跨平台方式是什么?

printf() 中可以有 '+' 运算符吗?

java - 将字符串转换为日期 - 罗马月

java - 将数组中的字符串映射到相应的实现类

c++ - 从字符串中的多个数字中删除前导零? [C++]

string - F#字符串到int的转换

python - 在 Python 中,如何将一个字符串拆分为多个整数?

c# - 将 C# 对象数组序列化为字符串的最快方法