# String schrittweise aller 3 Zeichen zerteilen



## Angel (31. Mrz 2005)

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?


----------



## Snape (31. Mrz 2005)

Moin,
benutz einfach die Methode substring() in der String-Klasse.


----------



## meez (31. Mrz 2005)

Da du den StringTokenizer ja kennst, wieso benutzt du ihn dann nicht  :bahnhof:


----------



## Snape (31. Mrz 2005)

Wenn kein Trennzeichen enthalten ist, nutzt der StringTokenizer nichts.


----------



## Illuvatar (31. Mrz 2005)

Vielleicht kannst du auch mit String#toCharArray was anfangen.


----------



## mic_checker (31. Mrz 2005)

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:


```
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.


----------



## daLenz (31. Mrz 2005)

oder vielleicht etwas in diese richtung:


```
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());
			}
		}
```


----------



## Angel (31. Mrz 2005)

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.


----------



## Illuvatar (31. Mrz 2005)

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.


----------



## daLenz (31. Mrz 2005)

oder noch eine variante:

```
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?)


----------



## Snape (31. Mrz 2005)

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:


----------



## meez (31. Mrz 2005)

Snape hat gesagt.:
			
		

> Wenn kein Trennzeichen enthalten ist, nutzt der StringTokenizer nichts.



Hallo? Jedes Zeichen kann ja ein Tokenizer sein...:autsch: 
So zum Beispiel gibt man alle Zeichen des Strings einzeln aus:

```
String s = "123456";		
		StringTokenizer str = new StringTokenizer(s, s, true);		
		while (str.hasMoreTokens()) {
			System.out.println(str.nextToken());
		}
```


----------



## Snape (31. Mrz 2005)

Huch, was es alles gibt...sieht mir allerdings etwas zweckentfremdet aus.


----------



## meez (31. Mrz 2005)

Snape hat gesagt.:
			
		

> Huch, was es alles gibt...sieht mir allerdings etwas zweckentfremdet aus.



yep...  :roll:


----------



## Illuvatar (31. Mrz 2005)

Snape hat gesagt.:
			
		

> Illuvatar hat gesagt.:
> 
> 
> 
> ...



Wieso?


```
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


----------



## meez (31. Mrz 2005)

So ... ich präsentiere auch noch eine Lösung:


```
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:


```
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;	
	}
```


----------



## Angel (31. Mrz 2005)

super danke, auf euch is echt verlass


----------



## Biesterfeld (31. Mrz 2005)

Hej,

Hat zwar nicht mit dem ursprünglichem Problem zu tun, aber die Suche führte mich zu diesem aktuellen Thread:



			
				daLenz hat gesagt.:
			
		

> ```
> 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
Biesterfeld


----------



## meez (31. Mrz 2005)

Hast du eventuell das falsche List Interface importiert?
Du musst java.util.List nehmen, nicht java.awt.List...


----------



## mic_checker (31. Mrz 2005)

Diese Anweisung ist mit Sicherheit korrekt, scheck mal die imports.

edit: too slow


----------



## daLenz (31. Mrz 2005)

jo wie schon gesagt...*muss* java.util.List sein!


----------



## Biesterfeld (31. Mrz 2005)

Hej,



> Du musst java.util.List nehmen, nicht java.awt.List...


man man man ...
das kommt davon wenn man es sich einfach machen will.

Habt vielen Dank!
Biesterfeld


----------



## Angel (1. Apr 2005)

wie kann ich hier eigentlich ein Häckchen reinmachen?

im Prinzip hat sich der Thread ja erledigt


----------



## meez (1. Apr 2005)

Unten Links hats ein Häkchensymbol...


----------



## Angel (1. Apr 2005)

danke


----------

