在Java中合并String []

时间:2010-10-23 17:21:12

标签: java

在Java中将多个String []合并为单个String []的最佳方法是什么?

4 个答案:

答案 0 :(得分:4)

好吧,你可以将一个[]放在一起等于所有[]的大小,然后调用System.arraycopy

http://download.oracle.com/javase/1.4.2/docs/api/java/lang/System.html#arraycopy(java.lang.Object,int,java.lang.Object,int,int

将每个人搬到新的大阵容。

这将是o(n),其中n是您想要组合的字符串数。

更好的问题是,您的代码是否真的如此性能至关重要,以至于您在arrayList上使用数组? ArrayList更容易使用,在大多数情况下应该在[]上使用。

答案 1 :(得分:2)

另一种可能性:

public static String[] mergeStrings(String[]...matrix){
    int total = 0;
       for(String[] vector : matrix){
             total += vector.length;
       }
       String[] resp = new String[total];

       for(int i=0; i< matrix.length; i++){
           for(int j=0; j< matrix[i].length; j++){
                resp[i*matrix.length + j] = matrix[i][j];
           }
       }
       return resp;
}

你不能测试:

public static void main(String[] args) {
        String[] resp =mergeStrings(new String[]{"1","2"}, new String[]{"3", "4", "5"});
        for(String s : resp)
            System.out.println(s);
}

答案 2 :(得分:2)

我建议使用System#arraycopy()代替平台本机操作(从而产生更好的性能):

public static String[] concat(String[]... arrays) {
    int length = 0;
    for (String[] array : arrays) {
        length += array.length;
    }
    String[] newArray = new String[length];
    int pos = 0;
    for (String[] array : arrays) {
        System.arraycopy(array, 0, newArray, pos, array.length);
        pos += array.length;
    }
    return newArray;
}

更加普遍:

public static <T> T[] concat(Class<T> type, T[]... arrays) {
    int length = 0;
    for (T[] array : arrays) {
        length += array.length;
    }
    T[] newArray = (T[]) Array.newInstance(type, length);
    int pos = 0;
    for (T[] array : arrays) {
        System.arraycopy(array, 0, newArray, pos, array.length);
        pos += array.length;
    }
    return newArray;
}

用法示例:

String[] arr1 = { "foo1", "bar1" };
String[] arr2 = { "foo2", "bar2", "baz2" };
String[] arr3 = { "foo3" };

String[] all1 = concat(arr1, arr2, arr3);
System.out.println(Arrays.toString(all1)); // [foo1, bar1, foo2, bar2, baz2, foo3]

String[] all2 = concat(String.class, arr1, arr2, arr3);
System.out.println(Arrays.toString(all2)); // [foo1, bar1, foo2, bar2, baz2, foo3]

答案 3 :(得分:0)

使用java.util.Arrays创建一个集合,然后返回List:)

    String[] moo1 = {"moo", "moo2"};
    String[] moo2 = {"moo3", "moo4"};
    String[] moo3 = {"moo5", "moo5"};

    ArrayList<String> strings = new ArrayList<String>();
    strings.addAll(Arrays.asList(moo1));
    strings.addAll(Arrays.asList(moo2));
    strings.addAll(Arrays.asList(moo3));
    String[] array = strings.toArray(new String[0]);