Строка 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];