Wie teile ich einen String in ein zweidimensionales Array auf (Java)?
Hallo,
ich komme bei einer Aufgabe mit mehreren Methoden zur zeit nicht weiter. Eine der Methoden ist, dass ein übergebener String "1234/9876/5555/4321" als Beispiel in ein zweidimensionales Array übertragen werden soll. Ich muss also an der Stelle [0][0] eine 1 eintragen, bei [1][1] eine 2 und so weiter. Der Flash markiert dann eine neue Zeile, sodass bei [1][0] eine 9 steht. Am Ende sollte das Array also so aussehen:
1 2 3 4
9 8 7 6
5 5 5 5
4 3 2 1.
Nur wie mache ich das aus dem String? Ich bin Anfänger, eine leicht verständliche Antwort wäre sehr nett. Vielen Dank!
3 Antworten
Kling verdächtig nach Hausaufgaben...
Aber hier ein Paar Tipps (oder genauer: Anhaltspunkte ;):
- String.split(
String regex
) - String.toCharArray()
- java.util.ArrayList
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...
http://openbook.rheinwerk-verlag.de/javainsel9/javainsel_04_008.htm
und dann kannst du die methode string.toCharArray() nutzen
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.
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.
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
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,"/" );
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.