Ich möchte 2 oder mehr aufeinanderfolgende Strings zu einer Zeichenkette in einem Array verketten, entsprechend den beiden Variablen x
und y
, was bedeutet, dass beginnend mit dem x: th Element verkettet wird, bis wir y Elemente verkettet haben. Zum Beispiel, wenn ein Array 'A' Elemente wie folgt hat:
So. Wer weiß, wie dies ohne komplexe Programmierung getan werden kann?
Der wahrscheinlich prägnanteste Weg ist:
Konstruiere ein Array der richtigen Größe:
%Vor% Kopieren Sie den Anfang und das Ende des Arrays mit System.arraycopy
:
Erstellen Sie die verkettete Zeichenfolge:
%Vor%(Hinweis: durch einen Fehler kann vorhanden sein, aufgrund des Datums des Schreibens)
Hier ist ein funktionierendes Skript, obwohl ich nicht weiß, wie einfach Sie es betrachten würden. Der Algorithmus geht einfach über das Eingabearray und kopiert Strings in die Ausgabe, bis wir den ersten Eintrag erreichen, der durch den Wert x
bestimmt wird. Dann verketten wir die y
-Zahl der Begriffe zu einer einzigen Zeichenfolge. Schließlich beenden wir das Kopieren der übrigen Begriffe nacheinander.
Hier ist ein sehr einfacher prozeduraler Ansatz:
%Vor%Erläuterung:
x - 1
index oder die Verkettung nicht abgeschlossen hat. x - 1
erreicht und die Verkettung nicht abgeschlossen haben, fügen Sie das Element zum Zeichenfolgengenerator hinzu. count == 0
), fügen Sie die verkettete Zeichenfolge zum Rückgabewert hinzu. Mit der List
API können wir die subList Methode sowie die addAll Methode zum Ändern eines bestimmten Abschnitts einer Liste und Einfügen von Elementen in eine Liste an der angegebenen Position.
Außerdem verwenden wir die Zeichenfolge Ersetzen Methode, um die redundante String-Repräsentation einer Liste zu entfernen und schließlich die Akkumulatorliste in ein Array von Strings umzuwandeln.
%Vor%nennt es so:
%Vor%erzeugt:
%Vor%und nenne es so:
%Vor%erzeugt:
%Vor% Wie es ist, gibt es keine Validierung für den Parameter start
und count
, aber ich überlasse das als Übung für Sie.
Eine weitere Alternative, die die Bibliothek java.util.stream
verwendet:
Dies verwendet IntStream.range
, um die neue Größe der Ausgabe-Liste festzulegen und int
s zu generieren, die Indizes in der Ausgabesequenz darstellen.
Dann wird .mapToObj
für jeden Ausgabe-Index verwendet, um zu entscheiden, was in die jeweilige Position geschrieben werden soll (Ausgabe hat nur einen einzigen Index für die verbundenen Zeichenfolgen).
Es gibt im Wesentlichen 3 Möglichkeiten für die Ausgabe - die durch die Methode getOrMergeData
entschieden werden:
data[index]
data[index + count - 1]
Arrays.copyOfRange
und string.Join
, um die Zeichenfolgen zu verbinden, die zusammengeführt werden müssen. Klicken Sie zum Ausführen Beispiel:
%Vor%Ausgabe:
%Vor%