Drei Zeilen eines List<String> in einem String speichern

  • Antworten:7
  • Bentwortet
patrickk83
  • Forum-Beiträge: 93

02.05.2020, 15:36:44 via Website

Hallo!

Möchte gerne immer drei Zeilen eines List in ein String speichern wobei jede Zeile mit einem "\n" abschließen soll.

Hier mal ein Beispiel:

List<String> obst = new ArrayList<> ();
obst.add("Apfel");
obst.add("Birne");
obst.add("Banane");
obst.add("Orange");
obst.add("Limette");
obst.add("Kirsche");

String obstGeteilt = String.join("\n", obst);
System.out.println(obstGeteilt);

Ich bräuchte jetzt einen String mit "Apfel\n",
"Birne\n",
"Banane\n"

Dann einen weiteren String (vielleicht mit einer Schleife gelöst) "Orange\n", "Limette\n", "Kirsche\n" und immer so weiter. Immer drei Zeilen zusammengefasst.

Kann mir da bitte jemand weiterhelfen?

Vielen Dank im Voraus

Kommentieren
Beste Antwort
Jokel
  • Forum-Beiträge: 1.530

02.05.2020, 16:04:38 via Website

Hallo vieleicht so

String st = "";
for (int i = 0; i < obst.size(); i = i + 3) {
st = "";
st = st + obst.get(i);
st = st + obst.get(i + 1);
st = st + obst.get(i + 2);
}

— geändert am 02.05.2020, 16:10:19

Hilfreich?
patrickk83
Kommentieren
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

02.05.2020, 15:57:59 via Website

Da könntest du die Methode SubList vewenden:
https://www.geeksforgeeks.org/arraylist-sublist-method-in-java-with-examples/

z.b.

 List<String> obstGeteilt= obst.subList(0, 2); //von Apfel bis Banane
 List<String> obstGeteilt2 = obst.subList(3, 5); //von Orange bis kirsche

Wenn deine Liste länger wird, kannst du auch dies in einer Schleife machen und ensprechend die Positionen zählen.

aus den beiden Teillisten kannst du dann mit String.join wieder einen zusammenhängenen String erstellen.

Solltest du auf den einzelnen Listenelementen mehr verändern wollen, wäre eine Methode zum bearbeiten und eine Schleife darum sinvoll

— geändert am 02.05.2020, 15:59:37

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
Kommentieren
patrickk83
  • Forum-Beiträge: 93

02.05.2020, 16:01:15 via Website

Danke für die rasche Hilfe!

Wie wäre es mit einer Schleife zu lösen? Ich meine, "lese immer drei Zeilen aus"? Ich komme einfach nicht drauf.

Hilfreich?
Kommentieren
Beste Antwort
Jokel
  • Forum-Beiträge: 1.530

02.05.2020, 16:04:38 via Website

Hallo vieleicht so

String st = "";
for (int i = 0; i < obst.size(); i = i + 3) {
st = "";
st = st + obst.get(i);
st = st + obst.get(i + 1);
st = st + obst.get(i + 2);
}

— geändert am 02.05.2020, 16:10:19

Hilfreich?
patrickk83
Kommentieren
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

02.05.2020, 16:10:18 via Website

Mit ohne SubListe Methode:

List<String> obstTeile = new ArrayList<String>(); //Ergebnis der aufteilung.
int anzTeile = obst.size()/3; //Anzahl der Teilstrings aus der Länge der Liste. 
//Randfälle dass die Anzahl der Elemente nicht durch 3 teilbar ist werden nicht beachtet.
for(int i=0;i<anzTeile,i++){ //für jeden Teilstring
StringBuilder sb = new StringBulder(); //zum bauen der Strings

for(int j=0;j< 3;j++){ //für jedes der 3 Elemente
sb.Append(obst.get(i+j)+",\n"); //lese Element an der stelle i+j=index
}
obstTeile.add(sb.ToString()); // zum ergebnis hinzufügen
}

Oder mit subList:

List<String> obstTeile = new ArrayList<String>(); //Ergebnis der aufteilung.
    int anzTeile = obst.size()/3; //Anzahl der Teilstrings aus der Länge der Liste. 
    //Randfälle dass die Anzahl der Elemente nicht durch 3 teilbar ist werden nicht beachtet.
    for(int i=0;i<anzTeile,i++){ //für jeden Teilstring
    StringBuilder sb = new StringBulder(); //zum bauen der Strings    
List<String> teilObst = obst.subList(i*3,i*3+3); //teilliste extrahieren  
    obstTeile.add(String.join(",\n",teilObst)); // zum ergebnis hinzufügen
    }

Edit: @Jokel machts für dein Beispiel mit 3 Elementen einfacher, bei mit ists dynamischer.
Tut aber im Prinzip das gleiche xD

— geändert am 02.05.2020, 16:11:52

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
Kommentieren
patrickk83
  • Forum-Beiträge: 93

02.05.2020, 16:19:37 via Website

Besten Dank,

werde die einfache Variante von Jokel nutzen. Ist genau wonach ich suchte. Da hab ich aber mal viel zu kompliziert gedacht... :-) Hätte ich selber drauf kommen können.

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.530

02.05.2020, 16:34:41 via Website

Genau das hat dir Ludy und auch ich schon im letzten thead gesagt.

Hilfreich?
Kommentieren
patrickk83
  • Forum-Beiträge: 93

02.05.2020, 16:49:09 via Website

Ja stimmt :-)

Hilfreich?
Kommentieren