我正在制作一个程序来确定两个单词是否是彼此的字谜。但是,我遇到以下错误,但我不完全确定原因:
java.lang.StringIndexOutOfBoundsException: String index out of range: 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;
}
最佳答案
您收到StringIndexOutOfBoundsException
,因为您正在使用非法索引调用StringBuffer2
。原因如下:
您一般有 3 个 StringBuffer
:差异、StringBuffer1 和 StringBuffer2。
说明:
StringBuffer difference= new StringBuffer();
这是您创建“结果”StringBuffer
的位置。现在让我们想象一下:
- StringBuffer1的
长度
为5 - StringBuffer2的
长度
为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
,并且执行失败。
关于java.lang.StringIndexOutOfBoundsException : String index out of range: 3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33862022/