1596 Stimmen

Wie kann ich zwei Arrays in Java miteinander verknüpfen?

Ich muss zwei Dateien verketten String Arrays in Java.

void f(String[] first, String[] second) {
    String[] both = ???
}

Wie lässt sich dies am einfachsten bewerkstelligen?

12voto

Reto Höhener Punkte 4609

Bitte verzeihen Sie mir, dass ich dieser bereits langen Liste noch eine weitere Version hinzufüge. Ich habe mir alle Antworten angesehen und beschlossen, dass ich wirklich eine Version mit nur einem Parameter in der Signatur haben möchte. Ich fügte auch eine Argumentprüfung hinzu, um bei unerwarteten Eingaben von einem frühen Scheitern mit vernünftigen Informationen zu profitieren.

@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;
}

11voto

keisar Punkte 5186

Mit Java 8+ Streams können Sie die folgende Funktion schreiben:

private static String[] concatArrays(final String[]... arrays) {
    return Arrays.stream(arrays)
         .flatMap(Arrays::stream)
         .toArray(String[]::new);
}

9voto

avigaild Punkte 63

Dies sollte ein Einzeiler sein.

public String [] concatenate (final String array1[], final String array2[])
{
    return Stream.concat(Stream.of(array1), Stream.of(array2)).toArray(String[]::new);
}

8voto

beaudet Punkte 766

Eine generische statische Version, die das leistungsstarke System.arraycopy verwendet, ohne dass eine @SuppressWarnings-Annotation erforderlich ist:

public static <T> T[] arrayConcat(T[] a, T[] b) {
    T[] both = Arrays.copyOf(a, a.length + b.length);
    System.arraycopy(b, 0, both, a.length, b.length);
    return both;
}

7voto

glue Punkte 95

Das funktioniert, aber Sie müssen Ihre eigene Fehlerprüfung einfügen.

public class StringConcatenate {

    public static void main(String[] args){

        // Create two arrays to concatenate and one array to hold both
        String[] arr1 = new String[]{"s","t","r","i","n","g"};
        String[] arr2 = new String[]{"s","t","r","i","n","g"};
        String[] arrBoth = new String[arr1.length+arr2.length];

        // Copy elements from first array into first part of new array
        for(int i = 0; i < arr1.length; i++){
            arrBoth[i] = arr1[i];
        }

        // Copy elements from second array into last part of new array
        for(int j = arr1.length;j < arrBoth.length;j++){
            arrBoth[j] = arr2[j-arr1.length];
        }

        // Print result
        for(int k = 0; k < arrBoth.length; k++){
            System.out.print(arrBoth[k]);
        }

        // Additional line to make your terminal look better at completion!
        System.out.println();
    }
}

Es ist wahrscheinlich nicht das effizienteste, aber es verlässt sich auf nichts anderes als Javas eigene API.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X