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

java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:3,java,runtime-error,indexoutofboundsexception,stringbuffer,Java,Runtime Error,Indexoutofboundsexception,Stringbuffer,我正在制作一个程序来确定两个单词是否是彼此的字谜。但是,我有以下错误,我不完全确定原因: java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:4 我只包含了这个方法,而没有包含整个程序,因为这是假设发生错误的方法 public StringBuffer differentCharacters() { StringBuffer difference = new StringBuffer(); for (int i=0; i<

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

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;
}
公共字符串缓冲区差异字符()
{
StringBuffer差异=新的StringBuffer();

对于(int i=0;i您将获得
StringIndexOutOfBoundsException
,因为您使用非法索引调用
StringBuffer2
。原因如下:

一般来说,您有3个
StringBuffer
s:differenceStringBuffer1StringBuffer2

说明:

StringBuffer difference= new StringBuffer();
这就是创建“结果”
StringBuffer
。现在让我们想象一下:

  • StringBuffer1
    长度为5
  • StringBuffer2
    长度为3
  • 执行:

    i=1

    i=2

    i=3

    就在那儿等着! 记住StringBuffer2的长度等于3?,这意味着:

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

    是非法的。因此会引发
    StringIndexOutOfBoundsException
    ,执行失败。

    我很确定
    StringBuffer2
    的大小小于
    StringBuffer1
    。这会导致异常。请向我们展示更多代码。为什么会导致异常?
    if(StringBuffer1.charAt(0) != StringBuffer2.charAt(0))
    
    if(StringBuffer1.charAt(1) != StringBuffer2.charAt(1))
    
    if(StringBuffer1.charAt(2) != StringBuffer2.charAt(2))
    
    if(StringBuffer1.charAt(3) != StringBuffer2.charAt(3))
    
    StringBuffer2.charAt(3) // 0 based index : 0-1-2-3 crash !!