Wie teile ich einen String in ein zweidimensionales Array auf (Java)?

3 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Kling verdächtig nach Hausaufgaben...

Aber hier ein Paar Tipps (oder genauer: Anhaltspunkte ;):

  • String.split(String regex)
  • String.toCharArray()
  • java.util.ArrayList
Annisoli 
Fragesteller
 25.04.2017, 13:19

Nein, freiwillige Übungsaufgaben. Wenn ich sie nur abgeben müsste, könnte ich genauso eine Lösung von den anderen aus höheren Semestern nehmen. Array List bringt mir doch nichts, wenn ich das hinterher bereits als zweidimensionales int Array Treturnen muss, oder? Kann ich ein Char Array typecasten, und wie erstelle ich es als zweidimensionales Array? Das mit dem splitten verstehe ich nicht (auch wenn mir mehrere Java Handbücher zur Verfügung stehen). Ich verstehe es so, dass man den String dann nur an bestimmten Zeichen (zum Beispiel "/") splitten kann? Aber ich muss ja nach jedem Zeichen einen neuen Eintrag erstellen und nach jedem Slash eine neue Spalte beginnen.

0
Isendrak  25.04.2017, 14:56
@Annisoli

Okay, in dem Fall hilft das vielleicht:

ArrayList<char[]> foo = new ArrayList<>();
String bar = "123/456/789";
for(String baz : foo.split("/")){
foo.add(baz.toCharArray());
}
char[][] yay = foo.toArray(new char[0][0]);

Du hast also erstmal eine Liste, die CharArrays (eindimensionale) aufnimmt, dann splittest du den String und "verwandelst" jeden Substring in ein CharArray (yep, eindimensional ;) und fügst dieses zur Liste hinzu.

Jetzt hast du eine Liste (erste Dimension) mit nem Haufen CharArrays (zweite Dimension), jetzt noch aus der Liste ein CharArrayArray[sic] machen, also ein Array für Arrays und fertig.

P.S.: Du könntest dir natürlich auch die ArrayList sparen, aber dann müsstest du zweimal durch den String laufen um die Größe der ersten Dimension zu ermitteln...

0

http://openbook.rheinwerk-verlag.de/javainsel9/javainsel_04_008.htm

und dann kannst du die methode string.toCharArray() nutzen

Annisoli 
Fragesteller
 25.04.2017, 13:20

Kann ich ein Char Array typecasten, und wie erstelle ich es als zweidimensionales Array? Das mit dem splitten verstehe ich nicht (auch wenn mir mehrere Java Handbücher zur Verfügung stehen). Ich verstehe es so, dass man den String dann nur an bestimmten Zeichen (zum Beispiel "/") splitten kann? Aber ich muss ja nach jedem Zeichen einen neuen Eintrag erstellen und nach jedem Slash eine neue Spalte beginnen.

0
Kiboman  25.04.2017, 13:32
@Annisoli

es sind 2 schritte

erst nach / zerlegen und dann mit toCharArray jedes zeichen.

was hält dich davon ab das array er 1dimensional und dann 2 dimensional zu machen?

ich weiss garnicht ob das in java geht beide vorgänge in einem rutsch,

nach dem split einfach .toCharArray(); dran hängen, so würde es jedenfalls in c# gehen.

0
Kiboman  25.04.2017, 13:36
@Kiboman

ps.: Wie is das überhaupt in java ^^ in c# ist ein string sowieso ein chararray und lässt sich ohne umweg über den index aufrufen, mist hier geht grad meine java Kenntnis zu ende.

0

Arbeite mit dem StringTokenizer, der Delimiter ist offensichlich ein "/"


String text = "1234/9876/5555/4321";
StringTokenizer tokenizer = new StringTokenizer(text,"/" );
while ( tokenizer.hasMoreTokens() )
  // Verarbeitung der einzelnen Strings


Die resultierenden Strings sind stets 4-stellig. Bei der Verarbeitung der Strings füllst Du also das 2-dimensionale Array zeilenweise und spaltenweise je Token

int zeile = 0;
while ( tokenizer.hasMoreTokens() ) {
String token = tokenizer.nextToken();
for (int i=0;i<4;i++) {
text[zeile][i] = token.charAt(i);
}
zeile++;
}

// ... und hier testweise Ausgabe des Ergebnis
for (int i=0;i<4;i++) {
for (int j=0;j<4;j++) {
System.out.print(" "+text[i][j]);
}
System.out.print("\n");
}


Liefert aus Ausgabe den gewünschten Output:

1 2 3 4
9 8 7 6
5 5 5 5
4 3 2 1

BaumeisterSepp  25.04.2017, 13:51

Sorry. Ich sehe gerade, dass ich beim Schreiben des Codes die Variablen falsch benannt habe. Es muss natürlich heißen

char[][] text = new char[4][4]; 
String eingabe = "1234/9876/5555/4321";
StringTokenizer tokenizer = new StringTokenizer(eingabe,"/" );
0