扩展数组以传递给varargs

时间:2014-04-10 10:24:07

标签: java

鉴于此功能签名:

public static void test(final String... args) {}

我想将一个字符串和一个字符串数组放入args

test("a", new String[]{"b", "c"});

但这是不可能的,因为第二个参数没有扩展。

那么可以扩展一个数组以适应varargs吗?

如果不可能,在给定一个字符串和一个字符串数组的情况下构造连接字符串数组的最短方法是什么? E.g:

String a = "a";
String[] b = new String[]{"b", "c"};
String[] c = // To get: "a", "b", "c"

谢谢。

5 个答案:

答案 0 :(得分:2)

我不知道其他任何更短的方式,但这对我来说非常干净。使用普通java(没有ant库

String a = "a";
String[] b = new String[] { "b", "c" };
String[] c = new String[b.length + 1];
c[0]=a;
System.arraycopy(b, 0, c, 1, b.length);

无论b

的大小如何,这都会有效

答案 1 :(得分:1)

您可以使用Guava's ObjectArrays.concat(T, T[])方法:

String a = "a";
String[] b = new String[]{"b", "c"};
String[] c = ObjectArrays.concat(a, b);

注意参数的顺序。使用(b, a)调用也可以,但是这会将元素附加到数组而不是前置(这是你想要的)。这在内部使用System.arraycopy()方法。

答案 2 :(得分:0)

您可以创建一个单独的数组,并将String" a"首先进入该数组,然后使用System.arraycopy()将数组b []复制到数组中,然后将新数组传递给方法。

答案 3 :(得分:0)

您可以使用StringBuilder

StringBuilder sb = new StringBuilder();
sb.append(a);
for(String s : b) {
    sb.append(s);
}

然后你可以将它转换回ArrayList或字符串数​​组......

答案 4 :(得分:0)

我想到的最短路(但不干净的代码):

test((a + "," + Arrays.toString(b)).replaceAll("[\\[\\] ]", "").split(","));

测试:

public static void main(String[] args) {
    String a = "a";
    String[] b = new String[] {"b", "c"};

    System.out.println(Arrays.toString(
            (a + "," + Arrays.toString(b)).replaceAll("[\\[\\] ]", "").split(",")));

}

输出:

[a, b, c]