Строка getChars() метод путаницы

Я читаю из K&B о струнах. Для некоторых дополнительных ноу-хау, я читал учебник из Oracle. Я копирую исходный код из Oracle.

public class StringDemo {  
    public static void main(String[] args) {  
        String palindrome = "Dot saw I was Tod";  
        int len = palindrome.length();  
        char[] tempCharArray = new char[len];  
        char[] charArray = new char[len];  

        // put original string in an   
        // array of chars  
        for (int i = 0; i < len; i++) {  
            tempCharArray[i] =   
                palindrome.charAt(i);  
        }   

        // reverse array of chars  
        for (int j = 0; j < len; j++) {  
            charArray[j] =  
                tempCharArray[len - 1 - j];  
        }  

        String reversePalindrome =  
            new String(charArray);  
        System.out.println(reversePalindrome);  

        //Testing getChars method //1  
        palindrome.getChars(0, len, tempCharArray, 1);  
        String tempString = new String(tempCharArray);  
        System.out.println(tempString);  
    }  
}

Я добавил пункт 1 в исходном коде. Я изучал метод getChars. Когда я запускаю его, эта программа дает мне ArrayIndexOutOfBoundsException. Вот то, что я прочитал в строковых документах.

public void getChars (int srcBegin, int srcEnd, char [] dst, int dstBegin)

Броски: IndexOutOfBoundsException - если любое из следующего верно: srcBegin является отрицательным. srcBegin больше srcEnd srcEnd больше длины этой строки dstBegin отрицательно dstBegin+(srcEnd-srcBegin) больше dst.length

Что такое destBegin? О каком смещении идет речь в документации. 1 - допустимое смещение в массиве назначения. Пожалуйста, помогите мне разрешить эту путаницу.

Благодарю.

3 ответа

Решение

Как написано в документации

символы копируются в подстроку dst, начиная с индекса dstBegin и заканчивая индексом:

 dstbegin + (srcEnd-srcBegin) - 1

так в вашем случае есть

1 + (лен - 0) -1 = лен

обратите внимание, что это конечный индекс - поэтому ваш конечный индекс len но в вашем массиве последний индекс len -1

Вы получаете IndexOutOfBoundsException потому что вам не хватило места в массиве назначения tempCharArray, который имеет длину len, Чтобы скопировать массив, есть getChars начать с массива назначения в начале массива, с индекса 0,

palindrome.getChars(0, len, tempCharArray, 0);  

У tempCHarArray такая же длина, как у палиндрома. Вы пытаетесь скопировать массив палиндромов, начиная с индекса 1. Попробуйте это и запустите заново или начните индекс с 0 ->

char[] tempCharArray = new char[len + 1]; 
Другие вопросы по тегам