Java String数组超出现有的String数组

时间:2013-05-13 08:59:00

标签: java arrays string constants

我有一个Java String数组:

public static final String[] FIELDS_NAMES = { "Albert", "Berta", "Carl" };
public static final String[] FIELDS_NUMBERS = { "123", "456", "789" };

并希望从我已有的第三个常量中创建第三个常量。目前我通过重复所有事情来做到这一点:

public static final String[] FIELDS_ALL = { 
    "Albert", "Berta", "Carl", "123", "456", "789"
};

但我真正想要的是:

public static final String[] FIELDS_ALL = {FIELDS_NAMES, FIELDS_NUMBERS};

知道怎么用Java做到这一点?显然我不想运行任何循环来改变周围的事物......

4 个答案:

答案 0 :(得分:2)

连接字符串数组的一种方法:

String[] FIELDS_ALL = ArrayUtils.addAll(FIELDS_NAMES, FIELDS_NAMES);

编辑注意:正如@Malachi所提到的,这使用 Apache Commons Lang Library

编辑不使用任何外部库:

您可以使用此通用方法执行此操作:

String[] join(String[]... arrays) 
{
  // calculate size of target array
  int size = 0;
  for (String[] array : arrays) 
  {
    size += array.length;
  }

  // create list of appropriate size
  java.util.List list = new java.util.ArrayList(size);

  // add arrays
  for (String[] array : arrays) 
  {
    list.addAll(java.util.Arrays.asList(array));
  }

  // create and return final array
 return list.toArray(new String[size]);
}

答案 1 :(得分:1)

尽管使用Apache Commons Lang是其他答案所建议的最简单,但是有一些方法可以使用Java内置语法来完成工作,而无需创建单独的实用方法。

public static final String[] FIELDS_ALL =
    new ArrayList<String>() {{
            addAll(Arrays.asList(FIELDS_NAMES));
            addAll(Arrays.asList(FIELDS_NUMBERS));
        }}.toArray(new String[0]);

(如果语法对其他人来说很奇怪:我正在创建一个匿名类,它是ArrayList的子类,并使用初始化程序来调用addAll来填充ArrayList的内容。)

答案 2 :(得分:0)

使用system.arraycopy

String[] concatArray(String[] A, String[] B) {
   int aLen = A.length;
   int bLen = B.length;
   int cLen = aLen+bLen;
   String[] C = new T[cLen];
   System.arraycopy(A, 0, C, 0, aLen);
   System.arraycopy(B, 0, C, aLen, bLen);
   return C;
}

答案 3 :(得分:0)

可以使用:

String[] FIELDS_NAMES = { "Albert", "Berta", "Carl" };
        String[] FIELDS_NUMBERS = { "123", "456", "789" };

        String[] FIELDS_ALL = new String[FIELDS_NAMES.length + FIELDS_NUMBERS.length] ;
        System.arraycopy(FIELDS_NAMES, 0, FIELDS_ALL, 0, FIELDS_NAMES.length);
        System.arraycopy(FIELDS_NUMBERS, 0, FIELDS_ALL, FIELDS_NAMES.length, FIELDS_NUMBERS.length);
        for (int j = 0; j < FIELDS_ALL.length; j++) {
            System.out.println(FIELDS_ALL[j]);
        }