# Zeilenumbruch String



## ksh (14. Okt 2005)

Hallo!

Bin gerade dabei, eine Methode zu schreiben, die mir einen String mit Zeilenumbruch ausgeben soll. Ich muss g.drawString verwenden - habe Methoden mit println gefunden, die mich leider nicht weiterbringen.  :### 
also, gebe z.B. folgendes ein:

```
String s = new String ("Einbauvorrichtung Scharniere einsetzen");
```
rufe dann meine Methode auf:

```
formatText(s, 20, g, i);
```
und hier der Quellcode der Methode:

```
public static void formatText(String s, int len, Graphics g, int i) {
		// len ist die Länge, welche der String nicht überschreiten darf
		// Sonderfall: String überschreitet die Länge nicht
		if ( s.length() <= len ) {
			g.drawString(s, 50+115*i, 220);
		}
		else {
			for (int j=len; j>=0; j--)
				//String ab der vorgegebenen Länge von rechts nach links durchlaufen, um das nächstgelegene Leerzeichen zu finden
				if((s.charAt(j))==' ') {
					String n = s.substring(0, j);
					//gefundene Zeile wird abgeschnitten und Methode rekursiv aufgerufen
					s = s.substring(j, s.length());
					formatText(s, len, g, i);
					g.drawString(n, 50+115*i, 220+(j+1)*10);
				}
		}
	}
```

Kompilieren funktioniert, aber bisher spuckt er immer nur die folgende Exception aus, weiß aber nicht warum!
Exception in thread "AWT-EventQueue-0" java.lang.StringIndexOutOfBoundsException: String index out of range: 10 at java.lang.String.charAt(Unknown Source)

Weiß jemand, wo der Fehler ist?????? oder hat einen anderen Vorschlag, wie man das anpacken könnte???
Wäre für jede Hilfe dankbar!  :bahnhof: 

Karina


----------



## Bleiglanz (14. Okt 2005)

starte bei len-1

[edit]
quatsch, s.length() > len 
habs übersehen


----------



## Mag1c (14. Okt 2005)

Hi Karina,

du veränderst innerhalb der for-Schleife den String s obwohl die for-Schleife dazu gedacht war, im String s die "Schnittmarke" zu finden. Da s immer kürzer wird, knallts irgendwann beim charAt(...). Abgesehen davon stimmt hier noch mehr nicht. Wenn es nicht sein muß, würde ich keine Rekursion nehmen. Habe mal etwas umgebaut:


```
int line = 0;
while (s.length() > len) {
    for (int j=len; j>=0; j--) {
        if((s.charAt(j))==' ') {
            String n = s.substring(0, j);
            g.drawString(n, 50+115*i, 220+(line*10));
            s = s.substring(j);
            line++;
            break;
        }
    }
}
g.drawString(s, 50+115*i, 220+(line*10));
```

Gruß
Mag1c


----------



## ksh (17. Okt 2005)

Vielen Dank! Sieht super aus!!! *selig grins*

Grüßle
Karina


----------

