String getChars()方法混淆

时间:2014-09-22 17:26:13

标签: 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[] 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-sr​​cBegin)大于dst.length

destBegin是什么?文档正在谈论什么偏移。 1是目标数组中的有效偏移量。请帮我解决这个困惑。

感谢。

3 个答案:

答案 0 :(得分:1)

您获得IndexOutOfBoundsException,因为目标数组tempCharArray中的空间不足,其长度为len。要复制数组,请在数组开头的目标数组中以索引getChars开始0

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

答案 1 :(得分:1)

正如documentation

所述
  

将字符复制到从索引开始的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];