java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:3
我正在制作一个程序来确定两个单词是否是彼此的字谜。但是,我有以下错误,我不完全确定原因: java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:4 我只包含了这个方法,而没有包含整个程序,因为这是假设发生错误的方法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<
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:difference,StringBuffer1和StringBuffer2
说明:
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 !!