Ich möchte ein String-Array erstellen, das mehrere leere Strings enthält.

String[] array = {"", "", "", "", ""};

In Python können wir dies einfach mit diesem Code [""] * 5 erreichen. Gibt es etwas ähnliches für Java?

2
user9483860 17 Apr. 2018 im 16:35

6 Antworten

Beste Antwort

Nichts syntaktisches, nein.

Auf API-Ebene gibt es Arrays.fill, aber leider wird das Array, an das Sie es übergeben, nicht zurückgegeben . Sie können es also nicht im Initialisierer verwenden. Sie müssen es anschließend verwenden:

String[] array = new String[5];
Arrays.fill(array, "");

Sie können natürlich jederzeit Ihre eigene statische Dienstprogrammmethode verwenden.

public static <T> T[] fill(T[] array, T value) {
    Arrays.fill(array, value);
    return array;
}

Dann

String[] array = YourNiftyUtilities.fill(new String[5], "");

(Natürlich wäre es wahrscheinlich zweifelhaft, dies mit veränderlichen Objekten zu tun, aber mit String ist das in Ordnung.)

4
T.J. Crowder 17 Apr. 2018 im 14:51

Sie können das fill Methode aus der Klasse Array.

String[] test = new String[10];
Array.fill(test, "");
2
Federico klez Culloca 17 Apr. 2018 im 13:41

Mit Java 8 haben Sie eine nicht so präzise, ​​aber besser als wiederholte Literale:

// will create a String[] with 42 blank Strings
String[] test = Stream
    // generate an infinite stream with a supplier for empty strings
    .generate(() -> "")
    // make the stream finite to a given size
    .limit(42)
    // convert to array with the given generator function to allocate the array
    .toArray(String[]::new);
2
Mena 17 Apr. 2018 im 14:16

Das nächste wäre

String[] array = new String[5];
Arrays.fill(array, "");

Es ist jedoch nicht genau dasselbe, als wenn array zuerst mit null Werten initialisiert würde.

1
Karol Dowbecki 17 Apr. 2018 im 13:41

Sie könnten versuchen, Fahrrad:

String[] array = new String[5];
for (int i = 0; i < 5; i++)
    array[i] = "";
1
JDo 17 Apr. 2018 im 13:43

Ein anderer Ansatz wäre, IntStream.rangeClosed zu verwenden, um die erforderliche Anzahl von Zeichenfolgen zu generieren.

String[] result = IntStream.rangeClosed(1, 5)
                           .mapToObj(i -> "")
                           .toArray(String[]::new);
1
Ousmane D. 17 Apr. 2018 im 16:59