繁体   English   中英

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

[英]java.lang.StringIndexOutOfBoundsException: String index out of range: 3

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

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;
}

您收到StringIndexOutOfBoundsException是因为您正在使用非法索引调用StringBuffer2 原因如下:

您一般有 3 个StringBufferdifference , StringBuffer1 & StringBuffer2

解释:

StringBuffer difference= new StringBuffer();

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

  1. StringBuffer1length为 5
  2. StringBuffer2length为 3

执行:

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

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

我 = 0

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

我 = 1

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

我 = 2

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

我 = 3

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

拿着它在那里! 还记得StringBuffer2的长度等于 3 吗? 这意味着以下内容:

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

是非法的。 因此抛出一个StringIndexOutOfBoundsException ,并且执行失败。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM