Java 字符串getChars()方法混淆
我正在读K&B关于弦的书。为了获得一些额外的诀窍,我正在阅读Oracle的教程。我正在从Oracle复制源代码Java 字符串getChars()方法混淆,java,ocpjp,Java,Ocpjp,我正在读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[] tempCharArra
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);
}
}
公共类StringDemo{
公共静态void main(字符串[]args){
String palindrome=“Dot saw I was Tod”;
int len=回文长度();
char[]tempcharray=新字符[len];
char[]charArray=新字符[len];
//将原始字符串放入
//字符数组
对于(int i=0;i
我在源代码中添加了第1点。我理解getChars方法。当我运行它时,这个程序会给我ArrayIndexOutOfBoundsException。以下是我在字符串文档中读到的内容
public void getChars(int srcbegen,int srcEnd,char[]dst,int
(开始)
抛出:IndexOutOfBoundsException-如果以下任一项为真:
srcbeagin是负数。SRCEBEGIN大于srcEnd srcEnd
大于此字符串的长度,则开始为负
DSTBENG+(srcEnd SRCBENG)大于dst.length
什么是开始?文档中提到的偏移量是多少。1是目标数组中的有效偏移量。请帮我解决这个困惑
谢谢。您将获得一个
索引自动边界异常
,因为目标数组tempcharray
的空间不足,该数组的长度为len
。要复制数组,请在目标数组中数组开头的索引0
处启动getChars
palindrome.getChars(0, len, tempCharArray, 0);
tempCHarArray的长度与回文相同。您正在尝试从索引1开始复制回文数组。尝试此操作,然后重新运行或在0->
char[] tempCharArray = new char[len + 1];
如在
字符从索引开始复制到dst的子数组中
在索引处开始和结束:
dstbegin + (srcEnd-srcBegin) - 1
你的情况就是这样
1+(len-0)-1=len
请注意,这是结束索引,因此您的结束索引是
len
,但在数组中,最后一个索引是len-1
,您可以将源字符串和目标字符串添加到您的问题中吗?这可能有助于我们澄清为什么会越界。不确定问题是什么。。。1是有效的offset@JasonD源字符串包含在程序中。忽略了这一点,它在回文中:)这意味着,JVM本身在运行时使用公式dstbeing+(srcEnd srcbeing)-1自动计算目标的长度。这是真的吗?为什么他计算的时候会有关系?也许它不在乎,只是试着去写