Java 字符串getChars()方法混淆

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

我正在读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);  
    }  
}
公共类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自动计算目标的长度。这是真的吗?为什么他计算的时候会有关系?也许它不在乎,只是试着去写