java.lang.StringIndexOutOfBoundsException: индекс строки вне диапазона: 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;
}

person anon1996    schedule 23.11.2015    source источник
comment
Я почти уверен, что размер StringBuffer2 меньше размера StringBuffer1. Что вызывает исключение. Покажите нам больше кода.   -  person Mohammed Aouf Zouag    schedule 23.11.2015
comment
Почему это может вызвать исключение?   -  person anon1996    schedule 23.11.2015


Ответы (1)


Вы получаете StringIndexOutOfBoundsException, потому что вы вызываете StringBuffer2 с недопустимым индексом. Вот почему:

Всего у вас есть 3 StringBuffer: difference, StringBuffer1 и StringBuffer2.

Пояснение:

StringBuffer difference= new StringBuffer();

Здесь вы создаете «результат» StringBuffer. А теперь представим на секунду, что:

  1. length StringBuffer1 равно 5
  2. length для 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, и выполнение завершается ошибкой.

person Mohammed Aouf Zouag    schedule 23.11.2015