Frage von WhyDontHelp, 50

java Zeilenumbruch in String nach jeweils x Zeichen einfügen?

Hallo Leute! Ich versuche gerade eine Aufgabe zu lösen und ich komme leider nicht weiter :/

Ich habe das Problem bei einen langen Textstring nach x Zeichen einen Zeilenumbruch einzufügen und dabei darf das Wort nicht "zerhackt" werden. Wenn das Wort zu lang ist, dann soll es einfach in die nächste Zeile gebracht werden.

Einzeln bekomme ich die Bedingungen hin, also entweder nach x Zeichen einen Zeilenumbruch einfügen oder das kein wort beim Zeilenumbruch zerhackt wird. Aber beides gleichzeitig funktioniert bei mir nicht..

Wenn ich nur die erste Bedingung habe, dann wird nach z.B. 40 Zeichen ein Zeilenumbruch gemacht, Wörter werden dabei einfach zerhackt, wenn sie sozusagen "im Weg" sind.

Wenn ich nur die zweite Bedingung habe, dann bleiben die Wörter ganz, aber nach jedem Wort wird ein Zeilenumbruch gemacht.

Das Ziel ist aber, dass nach x Zeichen ein Zeilenumbruch gemacht wird und dabei alle Wörter ganz bleiben. D.h. wenn ein Wort zu lang ist, dann soll nicht einfach beim x-ten Zeichen zerhackt werden, sondern einfach in die nächste Zeile verschoben werden.

Hätte jemand eine Idee wie das zu lösen ist?

Das wäre meine Lösung für den Zeilenumbruch für das ganze Wort:

public static void main(String[] args) {

             String text =  "Ich habe das Problem bei einen langen Textstring " +
                                     "nach x Zeichen einen Zeilenumbruch einzufügen und dabei " +
                                     "darf das Wort nicht zerhackt werden. " + 
                                     "Wenn das Wort zu lang ist, dann soll es einfach in die " +
                                      "nächste Zeile gebracht werden. " + lineSep;
    
             String space = " ";
     StringBuilder text2 = new StringBuilder(text);
    
    for (int i = 0; i < text2.length(); i++) {
        
        if (space.contains(String.valueOf(text2.charAt(i)))) {
            
            text2.delete(i,i+1);
            text2.insert(i,"\n");
            
        }
    }
            
    
    
System.out.println(text2);
}

und das ist meine Lösung für die den Zeilen umbruch nach x Zeichen:

int input = 40; // anzahl der Zeichen

StringBuilder text2 = new StringBuilder("text2"); for(int i = 1; (input * i) <= text2.length(); i++) text2.insert(input * j,"\n");

Antwort
von LeonardM, 35

Java wird doch wohl ne fertige wordwrap funktion haben

Antwort
von PWolff, 35

Ich würde einen eigenen StringBuilder für die aktuelle Zeile nehmen.

In C# sähe das dann etwa so aus:

StringBuilder ausgabe = new StringBuilder();
using sr = new StringReader(eingabetext) {
StringBuilder zeile = new StringBuilder();
while (!sr.EndOfStream) {
string wort = sr.ReadTo(Whitespaces);
if (zeile.Length + wort.Length - 1 <= maxLength) {
zeile.Append(wort);
} else {
zeile.Remove(zeile.Length - 1); // überflüssiges Leerzeichen am Ende entfernen
ausgabe.AppendLine(zeile);
zeile.clear();
zeile.Append(wort);
};
};
if (zeile.Length > 0) {
if (zeile.Chars(zeile.Length - 1).IsWhiteSpace()) {
zeile.Remove(zeile.Length - 1); // überflüssiges Leerzeichen am Ende entfernen
};
ausgabe.appendLine(zeile);
};
};

wobei ich die nicht eingebauten Funktionen geeignet definiert habe.

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten