我须要在Java中串联两个String
数组。 数组
void f(String[] first, String[] second) { String[] both = ??? }
最简单的方法是什么? ide
一个简单的变体,能够链接多个数组: spa
public static String[] join(String[]...arrays) { final List<String> output = new ArrayList<String>(); for(String[] array : arrays) { output.addAll(Arrays.asList(array)); } return output.toArray(new String[output.size()]); }
请原谅我为这个已经很长的列表添加了另外一个版本。 我查看了每一个答案,并决定我真的想要一个签名中仅包含一个参数的版本。 我还添加了一些参数检查功能,以便在乎外输入的状况下从早期失败中得到明智的信息。 code
@SuppressWarnings("unchecked") public static <T> T[] concat(T[]... inputArrays) { if(inputArrays.length < 2) { throw new IllegalArgumentException("inputArrays must contain at least 2 arrays"); } for(int i = 0; i < inputArrays.length; i++) { if(inputArrays[i] == null) { throw new IllegalArgumentException("inputArrays[" + i + "] is null"); } } int totalLength = 0; for(T[] array : inputArrays) { totalLength += array.length; } T[] result = (T[]) Array.newInstance(inputArrays[0].getClass().getComponentType(), totalLength); int offset = 0; for(T[] array : inputArrays) { System.arraycopy(array, 0, result, offset, array.length); offset += array.length; } return result; }
哇! 这里有不少复杂的答案,包括一些依赖于外部依赖性的简单答案。 这样作是如何的: get
String [] arg1 = new String{"a","b","c"}; String [] arg2 = new String{"x","y","z"}; ArrayList<String> temp = new ArrayList<String>(); temp.addAll(Arrays.asList(arg1)); temp.addAll(Arrays.asList(arg2)); String [] concatedArgs = temp.toArray(new String[arg1.length+arg2.length]);
思考问题的另外一种方式。 要链接两个或多个数组,必需要作的就是列出每一个数组的全部元素,而后构建一个新的数组。 这听起来像建立List<T>
,而后在其上调用toArray
。 其余一些答案使用ArrayList
,那很好。 可是如何实施咱们本身的呢? 这并不难: input
private static <T> T[] addAll(final T[] f, final T...o){ return new AbstractList<T>(){ @Override public T get(int i) { return i>=f.length ? o[i - f.length] : f[i]; } @Override public int size() { return f.length + o.length; } }.toArray(f); }
我相信以上等效于使用System.arraycopy
解决方案。 可是我认为这有它本身的美丽。 io
ArrayList<String> both = new ArrayList(Arrays.asList(first)); both.addAll(Arrays.asList(second)); both.toArray(new String[0]);