folgendes: ich habe einen String mit sagen wir 9 Zeichen. Nun will ich, das 3x3 Zeichen in einem Array stehen, also die Zeichenkette aller 3 Zeichen splitten. wie mache ich das? ich kenne Stringtokenizer etc., aber irgendwie stehe ich total auf dem schlauch, wie ich das am besten algoritmiere :bahnhof: bzw. gibts ne Methode dafür?
Moin,
Da du den StringTokenizer ja kennst, wieso benutzt du ihn dann nicht :bahnhof:
Wenn kein Trennzeichen enthalten ist, nutzt der StringTokenizer nichts.
Vielleicht kannst du auch mit String#toCharArray was anfangen.
willst du immer in eine 3 x 3 Matrix unterteilen oder ist das abhängig von der Länge des Strings ? (Vielleicht immer drei Zeilen und Anzahl Spalten variabel oder immer drei Spalten und Anzahl Zeilen variabel..?) Ansonsten könntest du auch einfach zwei for Schleifen holen (verschachtelt), mit der du das 2d Array durchgehst, du kannst den Elementen ja dann die Zeichen an den
jeweiligen Stellen des Strings zuweisen, in etwa so: Code: String myStr = "hallowelt";
char[][] myFeld = new char[3][3];
int count = 0;
for(int i = 0;i < 3;i++) {
for(int j = 0;j < 3;j++) {
myFeld[i][j] = myStr.charAt(count++);
}
} allerdings basiert der code darauf das der string auf jeden fall 9 zeichen lang ist (count wird nicht weiter überprüft), also dient nur zu Anschaungszwecken für ein 3 x 3 Feld.
oder vielleicht etwas in diese richtung: Code: String s = new String ("adkljdskjldlkjdfds");
List a = new ArrayList();
for(int i = 0; i < s.length(); i = 0){
if(s.length() < 3){
a.add(s);
System.out.println("weniger als 3 Zeichen!");
break;
}
else{
a.add(s.substring(i, i + 3));
s = s.substring(i + 3, s.length());
}
}
zur erklärung: die Stringkette ist immer glatt durch 3 teilbar, also die Länge kann varieren, aber dann immer so, das x 3er teilzeichenketten ohne überbleibsel rauskommen. bspl: "test1test2test3test4a" --> "tes" ; "t1t" ; "est" ; "2te" ; ..... es ist also egal was da drin steht und wie lang die is, aber die soll immer in beliebig viele 3er Teile
zerhackt werden. danke für eure antworten und bspl.
Dann mach nen char[][], das "äußere" Array hat die Größe Stringlänge/3, die "inneren" die Größe 3, mach nen chararray aus dem String, ne Zählervariable, geh mit ner geschachtelten for-Schleife durch das char[][] und tu immer an der jeweiligen Stelle stringchars[zähler++] rein.
oder noch eine variante: Code: String s = new String ("adkljdskjldlkjd");
List a = new ArrayList();
while(s.length() > 2){
a.add(s.substring(0, 3));
s = s.substring(3, s.length());
}
if(s.length() > 0 && s.length() < 3){
System.out.println("weniger als 3 Zeichen übrig!");
} ist im prinzip das selbe wie oben, einfach kompakter...(das ist doch das, was du benötigst?)
Illuvatar hat gesagt.: Dann mach nen char[][], das "äußere" Array hat die Größe Stringlänge/3, die "inneren" die Größe 3, mach nen chararray aus dem String, ne Zählervariable, geh mit ner geschachtelten for-Schleife durch das char[][] und tu immer an der jeweiligen Stelle stringchars[zähler++] rein. Von hinten durch die Brust ins Auge. :autsch:
meezTop Contributor
Snape hat gesagt.: Wenn kein Trennzeichen enthalten ist, nutzt der StringTokenizer nichts. Hallo? Jedes Zeichen kann ja ein Tokenizer sein...:autsch: Code: String s = "123456";
StringTokenizer str = new StringTokenizer(s, s, true);
while (str.hasMoreTokens()) {
System.out.println(str.nextToken());
}
Huch, was es alles gibt...sieht mir allerdings etwas zweckentfremdet aus. meezTop Contributor
Snape hat gesagt.: Huch, was es alles gibt...sieht mir allerdings etwas zweckentfremdet aus. yep... :roll:
Snape hat gesagt.: Illuvatar hat gesagt.: Dann mach nen char[][], das "äußere" Array hat die Größe Stringlänge/3, die "inneren" die Größe 3, mach nen chararray aus dem String, ne Zählervariable, geh mit ner geschachtelten
for-Schleife durch das char[][] und tu immer an der jeweiligen Stelle stringchars[zähler++] rein. Von hinten durch die Brust ins Auge. :autsch: Wieso? Code: public char[][] splitString (String s)
{
char[] stringChars = s.toCharArray();
char[][] splitted = new char[stringChars.length / 3][3];
int cnt = 0;
for (int i = 0; i < splitted.length; i++){
for (int j = 0; j < 3; j++){
splitted[i][j] = stringChars[cnt++];
}
}
return splitted;
} Edit: Ich seh jetzt erst, is ja fast dasselbe wie von mic_checker meezTop Contributor
So ... ich präsentiere auch noch eine Lösung: Code: public List splitString(String s) {
final List l = new ArrayList();
for (int offset =0; offset < s.length();offset += 3) {
l.add(s.substring(offset , offset + (s.length() >= offset + 3 ? 3:s.length() - offset)));
}
return l;
} Oder hier sogar noch mit Angabe der Teillänge: Code: public List splitString(String s, int length) {
final List l = new ArrayList();
for (int offset =0; offset < s.length();offset += length) {
l.add(s.substring(offset , offset + (s.length() >= offset + length ? length:s.length() - offset)));
}
return l;
}
super danke, auf euch is echt verlass
Hej, Hat zwar nicht mit dem ursprünglichem Problem zu tun, aber die Suche führte mich zu diesem aktuellen Thread: daLenz hat gesagt.: Code: List a = new ArrayList(); warum sagt mir der Eclipse-Compiler, dass ArrayList zu List _nicht_ zuweisungskompatibel ist? Der
Code ist bis auf diese eine Zeile (wenn ich sie z.B. auskommentiere) fehlerfrei. Vielleicht weiß ja jemand Rat. Beste grüße
meezTop Contributor
Hast du eventuell das falsche List Interface importiert?
Diese Anweisung ist mit Sicherheit korrekt, scheck mal die imports. edit: too slow
jo wie schon gesagt...muss java.util.List sein!
Hej, Du musst java.util.List nehmen, nicht java.awt.List... man man man ... Habt vielen Dank!
wie kann ich hier eigentlich ein Häckchen reinmachen? im Prinzip hat sich der Thread ja erledigt meezTop Contributor
Unten Links hats ein Häkchensymbol... |