我刚刚开始使用增强for-loop。我想知道我是否可以使用此循环来复制数组。我想迭代某个数组的每个元素并将其复制到一个新数组。使用增强的for循环来实例化我的新数组(而不是典型的for循环)也是很好的。在我目前的实现中,我知道我希望数组有多大,但是为了将来的参考,我想知道我是否可以这样做,如果是的话,如何做。
我对我正在做的具体计划可能有助于回答我的问题。我正在做的是从文本文件中检索一行文本,然后在该字符串上调用split(“,”) - 这将返回一个字符串数组。我想将这个数组存储在内存中,以便以后可以使用它。
我理解增强的for循环工作的方式是第一个值被赋予数组中的当前位置,第二个值是要遍历的数组。
我想知道for循环是否还有其他格式,除了:for(初始化;终止;迭代)和for(Object o:list [])。
答案 0 :(得分:3)
如果你想继续使用增强的for循环来复制数组,那么就会出现一个问题:增强的for循环没有计数器。但是,将元素插入到数组中需要一个计数器。所以你当然可以手动这样做:
String[] array = {"A", "Bb", "c", "dD"};
String[] newArray = new String[array.length];
int i=0;
for(String stuff : array) {
newArray[i++] = stuff;
}
这完全有可能,但实际上并不是增强的for循环背后的想法。
更符合意图的是这样的:
String[] array = {"A", "Bb", "c", "dD"};
List<String> list = new ArrayList<String>();
for(String stuff : array) {
list.add(stuff);
}
String[] newArray = new String[list.size()];
list.toArray(newArray);
这样你不仅可以遵循增强型for循环背后的想法,还可以考虑array.length() != newArray.length()
(因为你过滤了数组)的可能性。
答案 1 :(得分:2)
据我所知,只有标准for(init; termination; iterataion)
循环和for-for(type o : iterable)
循环。
首先,提前了解尺寸不应该是一个问题。要实例化新数组,请使用原始数组的.length字段:new String[original.length];
,如下所示。
继续前进,对于你正在做的事情,循环标准是合适的,原因有两个:
更重要的是,在原始数据类型或字符串的情况下,在for-each循环中:
之前声明的变量表示每个连续的值元素,并且不是实际元素的引用。因此,一旦循环迭代,对变量的任何更改都将消失。我不确定这是否适用于'普通'对象(即:不是字符串),因为我没试过,虽然我现在想知道。
举例说明:
String[] sArr = {"foobar"};
for(String s : sArr){
s = "openbar";
}
相当于:
String[] sArr = {"foobar"};
String s = sArr[0];
s = "openbar";
可悲的是,对于sArr [0],没有开放式酒吧,同样的旧foobar。
至于解决方案,如果你可以import java.util.Arrays;
然后尝试:
String[] copyStrings = Arrays.copyOf(arrStrings, arrStrings.length);
或者,如果你需要自己动手:
public String[] copyArray(String[] original){
String[] dupe = new String[original.length]; //I assume you want equal length
for(int i = 0; i < original.length; i++){
dupe[i] = original[i]; //single iterator traverses both arrays
}
return dupe;
}