我需要多次动态调整数组大小,而不是猜测其中有多少个元素。我已为此完成了代码,但它似乎没有工作,任何人都可以帮我弄清楚什么是错的!基本上我需要在找到匹配时继续添加匹配数组(为此实现了另一种方法)。
目前它只是填充匹配数组,然后为它试图放入数组的下一个元素提供一个ArrayIndexOutOfBoundsException。
以下是2个功能。
由于
private static String[] subStrings(String[] tokens) {
String[] matches;
matches = new String[40]; //creates a new array of matches
for (int i = 0; i <=tokens.length; i++){
for (int j = i+1; j <tokens.length;j++){
if(Text.match(tokens[i],tokens[j])){
matches[i]=(tokens[i]+" | "+tokens[j]);
System.out.println(matches[i]);
if(matches[matches.length-1]!=null){
reSize(matches, matches.length+10);
}
}
}
}
public static String [] reSize(String [] matches,int s){
if(s<0){
return null;
}
String BiggerMatch[] = new String[s];
for(int i=0; i< matches.length; ++i){
BiggerMatch[i]=matches[i]; //saves the original array in a temporary variable
}
matches = new String[s]; //adds s integer to the array size of matches
for(int i=0; i<=matches.length - s ; i++){ //leaves s spaces null at the end of the array
matches[i]= BiggerMatch[i];
}
matches = BiggerMatch;
subStrings(matches); //sending the new array back to the subStrings method
return BiggerMatch;//returns the new array
}
}
答案 0 :(得分:0)
使用ArrayList。 ArrayLists是具有相同类型的后备数组的列表。
ArrayLists遵循特定的调整大小策略(另请参见此处:ArrayList: how does the size increase?)。因此,如果元素超出后备数组大小,将创建一个新数组,并将复制“旧”数组中的元素。
如果您确实需要将数组作为返回值,则只需使用List的toArray
方法:
ArrayList<String> matches = new ArrayList<String>();
....
for(....) {
matches.add(someString);
}
....
return matches.toArray(new String[matches.size()]);
答案 1 :(得分:0)
public String[] resize(String[] original, int extra) {
// You are right you can't resize an array,
// But we can make a new one with extra amount of indexes
String[] newArray = new String[original.length + extra];
// Then we need to copy the original memory over to the new
// array. This leaves the end of the array all null.
System.arrayCopy(original, 0, newArray, 0, original.length);
// Then return it
return newArray;
}
现在,在使用此功能时,您必须在调用代码
中执行以下操作/// ....
if (matches[matches.length-1] != null) {
matches = resize(matches, 10);
}
这是因为就像你说的那样你无法真正调整数组的大小。因此,您需要使用resize方法创建的数组替换此堆栈上下文中的数组。