java.lang.StringIndexOutOfBoundsException : String index out of range: 3

标签 java runtime-error indexoutofboundsexception stringbuffer

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

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:差异StringBuffer1StringBuffer2

说明:

StringBuffer difference= new StringBuffer();

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

  1. StringBuffer1长度为5
  2. 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/

相关文章:

java - 从哪里获取 fragment 中的内容?

java - 从 GuavaCache 迁移到 EhCache (Spring Boot)

c - C 中的 Delete() 函数中的段错误(核心转储)

java - "java.lang.ArrayIndexOutOfBoundsException: -1",同时将制表符添加到 "javax.swing.JTabbedPane"

android - java.lang.IndexOutOfBoundsException : Index: 2, 大小:微调项选择中的 2

java - 回收 recyclerview 时应用程序的布局被破坏

java - 寻找矩阵上最短路径的问题

c++ - 删除动态数组后堆损坏

java - 尽管我得到了结果,为什么我会收到此错误?

java - try catch 循环(InputMismatchException 和 ArrayIndexOutOfBoundsException 之间的区别)