【问题标题】:java.lang.StringIndexOutOfBoundsException: String index out of range: 3java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:3
【发布时间】:2016-02-25 00:38:40
【问题描述】:

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

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

【问题讨论】:

  • 我很确定StringBuffer2 的大小小于StringBuffer1 的大小。这会导致异常。向我们展示更多代码。
  • 为什么会导致异常?

标签: java runtime-error indexoutofboundsexception stringbuffer


【解决方案1】:

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

您一般有 3 个StringBuffers:差异StringBuffer1StringBuffer2

说明:

StringBuffer difference= new StringBuffer();

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

  1. StringBuffer1length 是 5
  2. StringBuffer2length是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,并且执行失败。

【讨论】:

    猜你喜欢
    • 2012-03-02
    • 1970-01-01
    • 2018-11-14
    • 1970-01-01
    • 1970-01-01
    • 2014-04-14
    • 1970-01-01
    • 2019-05-22
    • 1970-01-01
    相关资源
    最近更新 更多