Zeilenumbruch String

  • Themenstarter Themenstarter ksh
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
K

ksh

Gast
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:
Code:
String s = new String ("Einbauvorrichtung Scharniere einsetzen");
rufe dann meine Methode auf:
Code:
formatText(s, 20, g, i);
und hier der Quellcode der Methode:
Code:
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
 
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:

Code:
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
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben