java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:3

时间:2015-11-23 00:29:16

标签: java runtime-error indexoutofboundsexception stringbuffer

我正在制作一个程序,确定两个单词是否是彼此的字谜。但是,我有以下错误,我不完全确定原因:

  

java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:4

我只包含了这个方法,而不是整个程序,因为这是假设发生错误的方法。

public StringBuffer differentCharacters() 
{
    StringBuffer difference = new StringBuffer();
    for (int i=0; i<StringBuffer1.length(); i++) 
    {
        if(StringBuffer1.charAt(i) != StringBuffer2.charAt(i))
        {
            difference.append(StringBuffer1.charAt(i));
        }
    }
    return difference;
}

1 个答案:

答案 0 :(得分:2)

您收到StringIndexOutOfBoundsException,因为您使用非法索引调用StringBuffer2。原因如下:

一般来说,你有3 StringBuffer个:差异 StringBuffer1 &amp;的 StringBuffer2

<强>解释

StringBuffer difference= new StringBuffer();

这是您创建“结果”StringBuffer的位置。现在让我们想象一下:

  1. StringBuffer1 length为5
  2. StringBuffer2 length为3
  3. 执行:

    for (int i = 0; i < StringBuffer1.length(); i++)
    

    在此循环中,您将根据 StringBuffer1 的长度(5)进行迭代。所以这就是发生的事情:

    i = 0

    if(StringBuffer1.charAt(0) != StringBuffer2.charAt(0))
    

    i = 1

    if(StringBuffer1.charAt(1) != StringBuffer2.charAt(1))
    

    i = 2

    if(StringBuffer1.charAt(2) != StringBuffer2.charAt(2))
    

    i = 3

    if(StringBuffer1.charAt(3) != StringBuffer2.charAt(3))
    

    紧紧抓住它! 还记得 StringBuffer2 的长度等于3吗?这意味着以下内容:

    StringBuffer2.charAt(3) // 0 based index : 0-1-2-3 crash !!
    

    是非法的。因此抛出StringIndexOutOfBoundsException,&amp;执行失败。