是否有一种更优雅的方式(最好是在SDK中),它将采用现有的N个String对象数组并追加另一个String,以便数组现在有N + 1个String对象?请参阅下文我是如何做到的。
import java.util.Arrays;
public class StringArrayAppend {
/**
* @param args
*/
public static void main(String[] args) {
String[] selectionArgs={"3","2"};
//Is there a SDK method to Arrays.append(selectionArgs,"1");?
int newSize=selectionArgs.length+1;
int indexNewElem=selectionArgs.length;
String[] selectionArgs2=new String[newSize];
System.arraycopy(selectionArgs, 0, selectionArgs2, 0, selectionArgs.length);
selectionArgs2[indexNewElem]="1";
selectionArgs=selectionArgs2;
selectionArgs2=null;
System.out.println("selectionArgs="+Arrays.toString(selectionArgs));
}
}
答案 0 :(得分:1)
我担心JDK中没有任何内容。
你可以自己使用Commons Lang,或者自己制作一个帮助方法(就像当前代码中的方法一样)。
您可以通过使用Arrays#copyOf
(允许副本比原始元素长一个元素)来简化代码。
无论你怎么做,你都会得到一个新阵列。由于数组无法调整大小,因此没有别的办法。
答案 1 :(得分:1)
如果你坚持使用Java Arrays我不知道一种优雅的方式将一个附加到另一个上,除了你做的那样(创建另一个具有正确大小的数组,只需将新元素添加到末尾)数组)。
编辑:我使用Apache Commons Lang Library ArrayUtils.addAll(T[], T...)
找到了一个单行解决方案String[] both = ArrayUtils.addAll(first, second);
使用ArrayList怎么样? ArrayLists是动态调整大小的,允许您简单地添加元素(使用ArrayList.add(Object o))。
答案 2 :(得分:1)
你可以用三行来完成,但整体效率是一样的:
String[] a = new String[] {"quick", "brown", "fox"};
List<String> s = new ArrayList<String>(Arrays.asList(a));
s.add("jumps");
a = s.toArray(new String[s.size()]);
System.out.println(Arrays.toString(a));
但是,当您需要容器的可扩展性时,最好的方法是使用ArrayList<String>
。
答案 3 :(得分:0)
据我所知,由于没有将数组转换为列表或从列表中转换数组,因此JDK中没有任何内容可以使此操作更容易。如果您不介意Google's Guava library,请使用ObjectArrays.concat()
方法。
使用示例代码中的值,它看起来像这样:
String[] selectionArgs = {"3", "2"};
selectionArgs = ObjectArrays.concat(selectionArgs, "1");