字符串索引超出范围

时间:2016-06-09 04:08:53

标签: java string

 int b[]=new int[s.length()];
        for(int r=0;r<=s.length();r++)
        {
            b[r]=(int) s.charAt(r);
            b[r]=b[r]+2;
        }

我在第4行收到字符串索引越界错误。一切似乎都是正确的。出了什么问题?

5 个答案:

答案 0 :(得分:0)

稍微改变循环逻辑

 int b[]=new int[s.length()];
        for(int r=0;r<s.length();r++)
        {
            b[r]=(int) s.charAt(r);
            b[r]=b[r]+2;
        }

请注意,循环应该运行到r&lt; s.length()

问题是在循环结束时,r的值大于此数组的最大索引1,因此s.charAt()导致错误。

答案 1 :(得分:0)

使用:

int b[]=new int[s.length()];
        for(int r=0;r<=s.length()-1 ;r++)
        {
            b[r]=(int) s.charAt(r);
            b[r]=b[r]+2;
        }

因为Array's index0开始,因此您的迭代必须运行length-1

答案 2 :(得分:0)

不要忘记数组从0开始 数组大小或长度以1开头。 问题出在for循环中。

答案 3 :(得分:0)

你通常不会像这样循环数组:

$b

只是因为数组是空索引对象,即

您可以将元素放在0到length-1

之间的范围内

<强> [0,长度)

即做

 for(int r=0;r<=s.length();r++)

现在,您正在尝试获取元素@length,这就是异常的原因

答案 4 :(得分:-1)

是的,你会得到的,因为字符串index从0开始,一直到(string length -1)。 假设

String str=new String("Graceful")

然后

str.charAt(0)==Gstr.charAt(7)==l,现在你正在做的是访问charAt(8)==XXX中没有任何内容的元素,你得到的字符串索引超出界限。
MySolution 您可以做的就是更改代码

for(int r=0;r<str.length();r++)

for(int r=0;r<=str.length()-1;r++)