我知道这可能是一个简单的问题,但到目前为止,我还没有在网上找到答案,也没有找到答案。我正在研究这个学校项目,基本上我需要阅读一个文本文件并将两种不同的单词放入两个不同的数组中。唯一的区别是我不能使用数组列表。我还需要能够读取任何大小的文件,这意味着我应该能够在需要时重新调整大小。
因此我需要分别读取两种文件的文件,如果文件太大,我需要将数组放大。有什么想法吗?我也打算用这个来分隔这两种词。
String[] a = line.trim().replaceAll("[^A-Z]").toLowerCase().split("\\s+");
答案 0 :(得分:3)
您需要创建一种方法,通过重新创建它来“拉伸”数组。
public String[] add(String[] arr, String el, int idx) {
if (idx >= arr.length) { //uh-oh, out of bounds incoming
String[] newArr = new String[arr.length * 2]; //let's grow our array by a factor of 2
for (int i = 0; i < arr.length; i++) { //copy the old values in
newArr[i] = arr[i];
}
newArr[idx] = el; //add in the new value
return newArr;
}
else {
arr[idx] = el;
}
return arr;
}
然后在想要添加元素时调用它
arr = add(arr, element, i);
请注意,如果您尝试添加的索引大于或等于当前大小的两倍,则上述代码中存在错误。这可以通过代码中的早期简单的健全性检查来解决。这更能让您了解摊销成本增长数组背后的逻辑。
答案 1 :(得分:0)
有没有办法在每次需要重新调整大小时使大小加倍,因为如果在重新调整大小之后,它仍然太小。我在想某种形式的循环
只需使用Arrays.copyOf(T [] original,int newLength)
http://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html#copyOf%28T[],%20int%29
对于newLength,您可以使用当前数组的长度* 2.