因此,我正在为“ MiniString”创建一个类,该类仅充满对象MiniString的实例方法,每个MiniString都有一个实例变量,该实例变量是char []。测试我的方法时,我无法找到substring()方法出了什么问题。有两种子字符串方法,其中一种采用int参数,另一种采用两个int参数。我一直在一个int参数方法上得到错误。应该使用substring方法返回一个新的MiniString,该字符串由int参数指定的目标Ministring中的位置与目标MiniString的末尾之间的字符组成。我不断进入JUnit Tester的错误如下:
java.lang.ArrayOutofBoundsException:22
at MiniString.substring(MiniString.java:141)
at MiniString.substring(MiniString.java:159)
这是我的对象MiniString的构造函数:
private char[] miniscule;
MiniString(char[] array){
int i = 0;
miniscule = new char[array.length];
while (i < array.length){
miniscule[i] = array[i];
i++;
}
}
MiniString(String string){
int i = 0;
miniscule = new char[string.length()];
while (i < string.length()){
this.miniscule[i] = string.charAt(i);
i++;
}
}
这是两个substring()方法的代码:
public MiniString substring(int start, int end){
int i = start;
if (end > start){
char[] temp = new char[end - start];
MiniString range = new MiniString(temp);
while (i < end){
range.miniscule[i] = this.miniscule[i];
i++;
}
return range;
}
else{
char[] temp = new char[1];
MiniString range = new MiniString(temp);
range.miniscule[0] = 0;
return range;
}
}
public MiniString substring(int position){
int start = position;
int end = this.miniscule.length;
char[] temp = new char[end - start];
MiniString output = new MiniString(temp);
output = substring(start, end);
return output;
}
谢谢你的帮助!
最佳答案
在您的第一个substring
方法中,该行
range.miniscule[i] = this.miniscule[i];
是最有可能的嫌疑犯。我希望你真的想要
range.miniscule[i - start] = this.miniscule[i];
String
具有子字符串方法,这些方法大致可以完成您在此处所做的事情,但是我想您是在学习该方法,而不是为了生产目的而重新发明字符串处理。如果您使用的是Java 6,则可能还需要查看
Arrays.copyOfRange(T[] ts, int i, int i1)
方法,该方法可以完成您在substring
方法中所做的大部分工作。