Text Formatierung

Ocean

Mitglied
Guten Tag 🙂! Ich komme bei folgendem Problem leider nicht weiter und würde mich sehr freuen, wenn Ihr mir helfen könntet.
Ich schreibe ein Programm, welches in einen vordefinierten Text nach einer bestimmten Zeichenanzahl, einen Zeilenumbruch einbaut, ohne jedoch Wörter abzuschneiden.

Beim ersten Druchlauf klappt es, aber wenn ich eine for-Schleife einbaue, gibt es nur bugs... Hier der funktionierende Code für einen Durchlauf.


Java:
public class Testklasse{

public Testklasse(String text) {
		this.text = text;
		text.trim();
	}


public String formatierung(int breite) {

		String text_neu = null;

		int z = 0;

		text_neu = text.substring(i, breite);

		z = kette.lastIndexOf(' ');

		text_neu = text.substring(i, z);

		StringBuilder textPuffer = new StringBuilder(kette);
		textPuffer.insert(z, '\n');

return kette;
}

}

public class Test {

	public static void main(String[] args) {

		String test = "allo Welt, heute ist ein wunderschöner Tag und ich habe eine blaue Hose an! Sie passt mir sehr gut. Einen schönen Tag noch.";
		
		Testklasse a = new Testklasse(test);		
		System.out.println(a.formatierung(10));   // zeilenumbruch nach 10 zeichen
	}

}
 
Zuletzt bearbeitet:
an folgende stelle in der methode: (string limit out of range)

Java:
for(i=0; i<=text.length(); i = i+breite)
{

text_neu = text.substring(i, breite);

 z = kette.lastIndexOf(' ');

 text_neu = text.substring(i, z);

 StringBuilder textPuffer = new StringBuilder(kette);
 textPuffer.insert(z, '\n');
}
 
Zuletzt bearbeitet:
Moin,

(a) Was bitte ist "kette" ???:L

(b) Ich sehe zumindest ein Problem in der Zeile
Java:
text_neu = text.substring(i, breite);
beim ersten Aufruf (i=0): substring(0,10)
beim zweiten Aufruf (i=10): substring(10,10)
beim dritten Aufruf (i=20): substring(20,10)
usw.

Gruß
Klaus
 
kette soll immer der teilstring sein,

habe das dank einer lösung soweit versucht zu optimieren, trotzdem noch der selbe fehler, nur anders:
habe eine hilsvariable (breite_neu) hinzugefügt und i nach dem durchlauf gleich z gesetzt

Java:
int breite_neu = breite;

for(i=0; i<=text.length(); i = i+breite)
{

text_neu = text.substring(i, breite_neu);

z = kette.lastIndexOf(' ');

text_neu = text.substring(i, z);

		i = z;
		
		breite_neu = breite_neu + breite;

StringBuilder textPuffer = new StringBuilder(kette);
textPuffer.insert(z, '\n');
}
 
Zuletzt bearbeitet:
Moin,

wie - anders ???:L 😱

[/code]
beim ersten Aufruf (i=0): substring(0,10)
beim zweiten Aufruf (i=10): substring(10,10)
beim dritten Aufruf (i=20): substring(20,10)
usw.

Grundlegend ändert das ja an diesen Aufrufen nichts (ob nun 'i' oder 'breite_neu' ist unerheblich) !


Und was nun "kette" ist, wissen wir immer noch nicht???:L

Gruß
Klaus
 
Wofür machst du da ne For schleife rein. Du änderst doch gar nichts an dem code da drin. Vorher macht er was du willst. Wieso dann in eine For Schleife rein packen? Macht doch so gar kein Sinn.
 
Moin,

Und was nun "kette" ist, wissen wir immer noch nicht???:L

Kette ist der neue Teilstring, der aus "text" gewonnen wird. Also eine zeichen"kette", die jede zeile bis zum absatz definiert.

Fehler gelöst, leider bugt es jetzt am Ende:


Java:
int i = 0;
breite_neu = breite;

while(i<=text.length)
{

text_neu = text.substring(i, breite_neu);

z = kette.lastIndexOf(' ');

text_neu = text.substring(i, z);

 i = z;
 
 breite_neu = breite_neu + breite;

StringBuilder textPuffer = new StringBuilder(kette);
textPuffer.insert(z, '\n');
}
 
Fehler liegt in der Zeile:

Java:
textPuffer.insert(z, '\n');

Fehlermeldung:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException
at java.lang.System.arraycopy(Native Method)
at java.lang.AbstractStringBuilder.insert(AbstractStringBuilder.java:1166)
at java.lang.StringBuilder.insert(StringBuilder.java:366)
at Absatz.getText(Testklasse.java:33) // das ist der oben stehende code
at Test.main(Test.java:9)
 
Mal so aus dem Stand :

Java:
StringBuilder textPuffer = new StringBuilder(kette);
textPuffer.insert(z, '\n');

Hier scheint die Länge von "kette" (weiß immer noch nicht, wo Du das wie deklarierst !!) kleiner als "z" zu sein ......
Gruß
Klaus
 
Moin, Und was nun "kette" ist, wissen wir immer noch nicht???:L

kette = text_neu, hatte aus versehen eine ältere version geladen, mit nem anderen variablennamen

die größe ist es wohl nicht, der fehler bleibt

Java:
if (z > text.length())break;
textPuffer.insert(z, '\n');

EDIT: Ahhh, es war doch richtig!!! Jetzt gibts dort keinen Error mehr, sondern nur noch oben:

String index out of range: 240

Java:
text_neu = text.substring(i, breite_neu)
;
 
Zuletzt bearbeitet:
Moin,

kette = text_neu
EDIT: Ahhh, es war doch richtig!!!
😀
Bleibt aber immer noch die Frage, WO Du kette deklarierst (ist dann hoffentlich auch ein String) ???:L

Jetzt gibts dort keinen Error mehr, sondern nur noch oben:
String index out of range: 240
Java:
text_neu = text.substring(i, breite_neu)
;
Prüf' doch einfach mal im Debugger die Werte von 'i' und 'breite_neu' an der Stelle ....
Von mir aus kannst Du sie im Notfall auch per "println.out" ausgeben lassen !

Gruß
Klaus
 

Zurück
Oben