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的前面。这根本不会改变它的长度。
注意:请不要说使用 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的前面。这根本不会改变它的长度。