Java:创建字符串 class:ArrayIndexOutOfBoundsException

Java : Creating a String class : ArrayIndexOutOfBoundsException

注意:请不要说使用 String class 方法,因为这里我正在自己创建所有 String 方法。

Objective : 考虑两个字符串 prince 和 soni。我想要 computeConcate 方法来询问位置(输入 Say 4),然后从名字开始到第 4 个位置获取字符串,并将其与姓氏 soni 连接起来。因此我得到了 prinsoni

错误:在 computeConcate() 方法中标记为错误的行出现 ArrayIndexOutOfBondsException

错误原因:这样得到的字符串(即名字和姓氏的连接最多可以是名字+姓氏的长度)

所以我创建了 String

char []firstSubString;
    firstSubString = new char[so.computeLength(firstName) + so.computeLength(lastName)];

它现在的长度是名字和姓氏的总和,但在使用此方法 computeSubstring() 之后,它变为名字的长度。

我想要什么?

Can you provide me a way so that computeSubstring doesn't end up changing lenght of firstSubString.

/**
 * Take two strings 
 * Run a loop pause when counter is encountered
 * Now use + to concatenate them
 **/
@Override
public char[] computeConcatenation(char[] firstName, char[] lastName, int pos ) {
    StringClass so = new StringClass();
    Boolean flag = false;
    char []firstSubString;
    firstSubString = new char[so.computeLength(firstName) + so.computeLength(lastName)];

    System.out.println( firstSubString.length ); // O/p is 10 ( length of                                            //                                                  first name + last name

    firstSubString = so.computeSubstring(firstName, pos);

    System.out.println( firstSubString.length );   // o/p is 6. length of                         //                                                   first name

    int len = so.computeLength(firstSubString);

    // To find pos
    for(int i = 0; i < so.computeLength(lastName); i++){

        // ArrayIndexOfOfBondsException on this line
Error : firstSubString[len + i] = lastName[i]; 
    } 
    return firstSubString;
}



Here is the code for substring method

/**
 * Traverse the string till pos. Store this string into a new string
 */
@Override
public  char[]  computeSubstring(char[] name, int pos) {
    StringClass so = new StringClass();
    char []newName;
    newName = new char[so.computeLength(name)];



        for(int i = 0; i < so.computeLength(name); i++){
        if( i == pos) break;
        newName[i] = name[i];
    }
    return newName;
}

嗯,它改变了,因为你在这里覆盖了 firstSubString

firstSubString = so.computeSubstring(firstName, pos);

您想做什么;但是,将 computeString 的结果复制到 firstSubString 的第一部分。您可以使用 System.arraycopy()

相当简单地完成此操作
char[] result = so.computeSubstring(firstName, pos);
System.arraycopy(result, 0, firstSubstring, 0, result.length); 

这会将结果复制到firstSubstring的前面。这根本不会改变它的长度。