1

我有一个 Java 字符串数组:

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

4 回答 4

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]);
}
于 2013-05-13T09:01:24.163 回答
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 的内容。)

于 2013-05-13T10:11:13.513 回答
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]);
        }
于 2013-05-13T09:48:22.073 回答
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;
}
于 2013-05-13T09:03:17.017 回答