【问题标题】:String index out of bound [duplicate]字符串索引超出范围[重复]
【发布时间】:2016-06-09 04:08:53
【问题描述】:
 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 行得到一个字符串索引越界错误。一切似乎都是正确的。怎么了?

【问题讨论】:

  • 您不需要演员表,因为char 可以扩展为intb[r] = s.charAt(r) + 2;
  • r &lt;= s.length() 更改为r &lt; s.length()

标签: java string


【解决方案1】:

稍微改变循环逻辑

 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

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

【讨论】:

    【解决方案2】:

    使用:

    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

    【讨论】:

    • for(int r=0;r&lt;=s.length()-1 ;r++) 必须是 for(int r=0;r&lt;s.length()-1 ;r++)
    • 看看你的for循环,是String out of bound exception的原因
    • 我不是反对者,也不一定同意你应该被反对,但for(int r=0;r&lt;s.length() ;r++) 更容易阅读。
    • @holidayCoder 自己看代码——没错。
    • 对不起,我没有看到-1 部分,
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

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

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

      您可以将元素定位在 0 到 length-1 之间的范围内

      [0,长度)

      即做

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

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

      【讨论】:

        【解决方案5】:

        是的,你会得到因为字符串 indexstart 从 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&lt;str.length();r++)

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

        【讨论】:

        • 为什么我的代码也包含 -1 而被否决?我不明白@holidayCoder
        • 好吧,对不起,我以为你做到了,那么曾经做过的人请纠正它。因为我的代码工作得很好。
        • 您必须对其进行编辑,使其更具可读性
        • 这里是新的,所以我只能编辑粗体部分......不知道如何缩进代码并添加多个空格和新行:)
        • 它甚至不是我,但让我告诉你,你的问题被否决只是因为你没有正确格式化它。
        猜你喜欢
        • 2013-06-26
        • 2017-03-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-04
        • 1970-01-01
        • 2013-05-13
        相关资源
        最近更新 更多