JAVA: Wie bekomme ich einen String in ein 2d-Character Array?

3 Antworten

IntStream chars = text.chars();
Iterator<Integer> charsIter = chars.iterator();
for(int i = 0; i < 5; ++i){
    for(int j = 0; j < 5; ++j){
        2dArray[i][j] = charsIter.next();
    }
}

So inetwa sollte das gehen. Wahrscheinlich will man aber noch mehr Stream-Magie nutzen, statt das so zu machen und Wahrscheinlich will man eigentlich auch Codepoints statt Characters.


MrAmazing2  11.12.2021, 17:10

Ich würde zum Iterieren über den String einfach text.charAt() benutzen.

Damit spart man sich die zwei unnötigen Objekte. Siehe Ecaflips Antwort. Der hat den selben Ansatz, aber mit text.charAt().

Wobei ich meinen Ansatz noch besser finde :P

0
Destranix  11.12.2021, 17:16
@MrAmazing2
Ich würde zum Iterieren über den String einfach text.charAt() benutzen.

Ich nicht. Da muss man sich den index ausrechnen, das kann leicht umgehen und ist potentiell ineffizient. Wobei meine Variante auch nicht die Beste ist, ich war schlicht zu faul das iterieren mittels Stream-Methoden zu erledigen.

(Wohlgemerkt: Ich gehe von größeren Zahlen aus, für 5x5 wäre das wohl nicht unbedingt effizienter, das stimmt. Wobei prinzipiell ja auf den gängigen maschinen schlicht ein memcopy geschehen müsste, das müsste der Compiler bzw. dre Interpreter irgendwie erkennen. Wie, das weiß ich nicht, dafür kenne ich mich nicht gut genug dafür aus.)

1

Du kannst Anhand der Position eines Buchstaben im String die entsprechende Reihe und Spalte im 2D-Array berechnen. Wenn i die Position ist, dann gilt:

i/5 gibt dir die Reihe.

i%5 gibt dir die Spalte.

Du musst nun alle Zeichen (chars) des Strings durchgehen und sie an die passende Stelle einfügen. Dafür kannst du folgenden Code benutzen:

for (int i = 0; i < text.length(); i++){
    twodArray[i/5][i%5] = text.charAt(i);   
}
Woher ich das weiß:Hobby – Programmieren ist mein Hobby & Beruf

jamma630 
Beitragsersteller
 11.12.2021, 17:26

Hey, danke für die gute Antwort! Ich verstehe jedoch etwas nicht du teilst ja bei dem twodArray in der ersten Klammer immer i/5, also 0/5, 1/5, usw.. Aber wenn man doch bspw 1/5 teilt ist die Antwort doch 0,2. Aber wo liegt denn die 0,2 stelle im Array? Ich dachte Arrays bestehen immer aus Array[0][0], Array[1][0], ...

Wieso klappt es dann wenn dort 0,2 steht?

0
MrAmazing2  11.12.2021, 17:36
@jamma630

Bei Array[0][2] ist 0 die Zeile und 2 die Spalte.

Im folgenden siehst du ein 5x5 2D-Array, mit O befüllt, und an der Stelle [0][2] ein X:

O O X O O
O O O O O
O O O O O
O O O O O

Vlt. hilft dir das.

0
ralphdieter  11.12.2021, 18:35
@jamma630
1/5 teilt ist die Antwort doch 0,2

Nein. Bei einer Integer-Division ist das Ergebnis immer ganzzahlig. Dabei wird immer in Richtung 0 gerundet, also 1/5=0, -6/5=-1 usw.

1
MrAmazing2  11.12.2021, 20:13
@ralphdieter

Ahhh, das meinte er, hab ich falsch verstanden. Dachte er meint „0 und 2“. Bin’s garnichtmehr gewohnt dass die Nachkommastellen im Deutschen per Komma getrennt sind und nicht per Punkt wie im Englischen. Danke ^^

1
for (int i=0; i<4; i++){
  for (int j=0; j<5; j++){
    twodArray[i][j] = text.charAt(5*i+j);
  }
}
Woher ich das weiß:Berufserfahrung – Programmierer

TechPech1984  11.12.2021, 17:06

also das wird nicht funktionieren . die ersten 5 werden alle stelle 0 sein 0*X = 0

1
jamma630 
Beitragsersteller
 12.12.2021, 17:04

Danke!

0