我正在阅读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);
}
}
我在源代码中添加了point-1。我正在理解getChars方法。当我运行它时,这个程序给我ArrayIndexOutOfBoundsException。这是我在String docs中读到的内容。
public void getChars(int srcBegin,int srcEnd,char [] dst,int dstBegin)
抛出:IndexOutOfBoundsException - 如果满足以下任何条件: srcBegin是否定的。 srcBegin大于srcEnd srcEnd是 大于此字符串的长度dstBegin为负数 dstBegin +(srcEnd-srcBegin)大于dst.length
destBegin是什么?文档正在谈论什么偏移。 1是目标数组中的有效偏移量。请帮我解决这个困惑。
感谢。
答案 0 :(得分:1)
您获得IndexOutOfBoundsException
,因为目标数组tempCharArray
中的空间不足,其长度为len
。要复制数组,请在数组开头的目标数组中以索引getChars
开始0
。
palindrome.getChars(0, len, tempCharArray, 0);
答案 1 :(得分:1)
将字符复制到从索引开始的dst子数组中 dstBegin并以index:
结束dstbegin + (srcEnd-srcBegin) - 1
所以你的情况是
1 +(len - 0)-1 = len
请注意,这是结束索引 - 所以您的结束索引是len
,但在您的数组中,最后一个索引是len -1
答案 2 :(得分:0)
tempCHarArray与回文的长度相同。您正尝试从索引1开始复制回文数组。尝试此操作并在0处重新运行或开始索引 - >
char[] tempCharArray = new char[len + 1];